2016-05-20 14 views
0

Ich habe in lex.l die sintax.tab.hh und sitax.tab.cc mit Bison erfolgreich und enthalten erzeugen die lex.yy.cc mit den folgenden Befehlen zu generieren:Wie benutze ich yyparse() von Bison woanders?

bison -d sintax.yy 
flex lexer.l 

und ich habe die 3 entsprechenden Dateien für einen einfachen Parser, in syntax.yy und lexer.l I don setze keinen C++ Code in den letzten Teil; Ist das richtig?

Ich möchte diese Dateien in einem anderen Projekt verwenden, an dem ich arbeite, also habe ich keine Ahnung, wie das geht.

In meiner eigenen Methode in einer anderen Klasse deklariert, wie kann ich:

  1. der Eingang für den Parser angeben wird eine definierte Zeichenfolge sein?
  2. den Parser mit einer anderen Zeichenfolge neu starten?

Antwort

0

Dies ist wirklich nur eine Frage (lex), wie der Lexer die Eingabe behandelt.

Mit Flex können Sie die Funktionen nutzen:

yyrestart(FILE * input_file) 
yy_scan_string(const char * string) 
yy_scan_buffer(const char * buffer, size_t size) 

den Eingang zu einem gewissen anderen Quelle als stdin wechseln (nennen wir diese vor yyparse Aufruf). Es gibt auch eine Reihe von "Puffer" -Funktionen, die Sie verwenden können, um mehrere Puffer im laufenden Betrieb zu erstellen und zwischen ihnen während der Analyse umzuschalten (nützlich für die Behandlung von Dingen wie "include" -Direktiven).

Sie können alles über sie in the flex documentation

lesen