Hallo,
ich habe mir einen Scanner / Parser mit Flex und Bison geschrieben. Bis jetzt sagt mir der Parser einfach nur, ob meine Query valide ist oder Fehler enthält.
Nun stellt sich mir aber die Frage, wie ich die Daten des Scanners und Parsers mit verwalteten Klassen / Variablen außerhalb der y- und l-Dateien weiterverarbeiten kann.
Dabei soll der Scanner die Token und die Zeichen zusammen mit Zeile und Spalte in einer Liste speichern, die ich dann mit dem Parser weiterverarbeiten kann. Anschließend sollen die Daten in der Klassen ANAquery zur Verfügung stehen.
Leider habe ich es noch nicht geschafft...
Kann mir da jemand Starthilfe geben?
Aufruf des Parsers:
So sehen die eben aufgerufenen Methoden aus:
ich habe mir einen Scanner / Parser mit Flex und Bison geschrieben. Bis jetzt sagt mir der Parser einfach nur, ob meine Query valide ist oder Fehler enthält.
Nun stellt sich mir aber die Frage, wie ich die Daten des Scanners und Parsers mit verwalteten Klassen / Variablen außerhalb der y- und l-Dateien weiterverarbeiten kann.
Dabei soll der Scanner die Token und die Zeichen zusammen mit Zeile und Spalte in einer Liste speichern, die ich dann mit dem Parser weiterverarbeiten kann. Anschließend sollen die Daten in der Klassen ANAquery zur Verfügung stehen.
Leider habe ich es noch nicht geschafft...
Kann mir da jemand Starthilfe geben?
Aufruf des Parsers:
Code:
bool ANAquery::isValid(String^ query_string)
{
ANAqueryParser^ parser = gcnew ANAqueryParser();
parser->setInput(query_string);
if(1 == parser->process()) {
parser->~ANAqueryParser();
return false;
}
parser->~ANAqueryParser();
return true;
}
So sehen die eben aufgerufenen Methoden aus:
Code:
#include "stdafx.h"
extern int yyparse();
extern FILE *yyin;
void ANAqueryParser::setInput(System::String ^query_string){
//
// write query string into file
// it was done in this way, because of too difficult conversions between System::String and other types for further steps
//
StreamWriter sw(TMP_QUERY_STRING_FILE);
sw.Write(query_string);
sw.Close();
//
// read query string from file into standard input
//
fopen_s(&yyin, TMP_QUERY_STRING_FILE, "r");
}
ANAqueryParser::t_error_code ANAqueryParser::process(){
lex_fac = gcnew LexValueFactory();
return yyparse();
}
ANAqueryParser::~ANAqueryParser(){
fclose(yyin);
}