2009-04-08 10 views

Antwort

8

Ich denke, Sie mit der --name-prefix Option Bison dazu kann, und die --prefix Option Flex.

In beiden Fällen können Sie das standardmäßige Präfix "yy" ersetzen, das für die Funktionen verwendet wird, die mit einem Präfix Ihrer Wahl generiert werden.

+0

Ich benutze Lex und Yacc, aber das ist gut zu wissen, wenn wir zu den Freeware-Versionen wechseln. Danke dave –

+0

ah, aber Sie haben sie in Ihren Tags erwähnt ... – Alnitak

+0

True. Wenn sie nur zur Arbeit kommen sollen, benutzen Sie Flex und Bison. Wir werden Änderungen vornehmen müssen, um sie zu benutzen. –

2

Ja, das ist möglich.

yacc sollte ein -p Flag haben, wo Sie ein anderes Präfix anstelle des Standard "yy" angeben können.

Die von lex erzeugte Datei enthält nur ein außerhalb verwendetes Symbol: yylex. Sie können zum Beispiel mit -Dylex = mySecondLex kompilieren.

+0

Ich muss es überprüfen, aber das ist genau das, was ich brauche. Danke, Dave. –

+0

Ich hoffe, deine Version von yacc hat diese Flagge. Ansonsten kann man zu Bison wechseln, es ist nicht wirklich anders. – Ingo

+0

Sind nicht ihre Symbole wie yytext und so weiter (yywrap?), Die auch draußen verwendet werden? –

1

Keine direkte Antwort, aber Sie sollten überlegen, einen allgemeineren Ansatz wie GoldParser zu verwenden, mit dem Sie eine generische Engine verwenden können, um die aus Ihren Grammatiken generierten LALR- und DFA-Tabellen zu verarbeiten.

So können Sie eine beliebige Anzahl verschiedener Grammatiken in derselben Anwendung verwenden, und das Ändern der Grammatik erstellt keinen neuen Quellcode, sondern nur neue Tabellendateien (die als eingebettete Ressource oder ähnliches enthalten sein könnten).

+0

Wir sind nicht in der Lage, das System am Mo zu ändern, aber wir könnten es in der Zukunft betrachten. Danke, Dave. –

1

Standard lex und yacc haben keine Möglichkeit, das zu tun. Flex und Bison tun dies ebenso wie einige andere Implementierungen. Da Sie (in einem Kommentar) gesagt haben, dass Sie nicht Flex und Bison verwenden, welche Versionen von Lex und Yacc sind Sie verwenden?

+0

POSIX benötigt yacc, um Symbolpräfixänderungen mit '-p prefix' zu unterstützen (anstelle von 'yy'). Interessanterweise erfordert dies nicht für Lex; Ich gehe davon aus, dass in der Praxis viele Leute den lexikalischen Analysator handkodieren und das war nicht so kritisch. –