2010-12-10 15 views
0

Ich möchte Ihnen eine Frage über Flex, das Programm zum Parsen von Code stellen. Angenommen ich habe eine Anweisung wie dieser, in der ein Teil Regeln:Frage in Flex (Parser)

"=" BEGIN(attribution); 

<attribution>{var_name} { fprintf(yyout, "="); ECHO; } 

<attribution>";" BEGIN(INITIAL); 

{var_name} ist ein regulärer Ausdruck, der den Namen einer Variable übereinstimmt, und alles, was ich tun möchte, ist am Ausgang alle Zuschreibung kopieren Anweisungen wie a = 3; oder b = a;

Meine Regel kann jedoch nicht mit fprintf das linke Mitglied der Attribution schreiben, sondern nur = 3; oder = a;

Eine Lösung für das könnte sein, dass, nachdem ich die Übereinstimmung "=" und ich bin in der Attribution-Status, um 2 Positionen zurück gehen, um auch den linken Operand zu bekommen. Wie kann ich das in Flex?

+0

Flex ist kein Parser. Es ist ein Lexer-Generator. –

Antwort

1

Warum verwenden Sie Flex für die syntaktische Analyse?

Was Sie tun, klingt wie ein Bison-Zeug nicht ein Flex-Job. Sie können das vorherige Token speichern.

Wenn Sie weiterhin flex verwenden möchten, können Sie das Muster/verwenden. Dies kann zu Ineffizienzen führen und der Lexer kann gefälscht sein; Es hängt vom gesamten Regelwerk ab.

{var_name}/"=" { ECHO; BEGIN(attribution); } 

Siehe the flex manual.