ANTLR-Grammatik: Parser- und Lexer-Literale

8

Was ist der Unterschied zwischen dieser Grammatik:

%Vor%

und das:

%Vor%

?

Wenn es einen Unterschied gibt, da dies die Leistung beeinflusst ... Danke

    
BB. 23.03.2010, 07:27
quelle

4 Antworten

8

Zusätzlich zu Wills Antwort ist es am besten, Ihre Lexer-Token explizit zu definieren (in Ihrer Lexer-Grammatik). Falls Sie sie in Ihrer Parser-Grammatik mischen, ist nicht immer klar, in welcher Reihenfolge die Token vom Lexer in Token umgewandelt werden. Wenn sie explizit definiert werden, werden sie immer in der Reihenfolge in die Reihenfolge gebracht, in der sie in die Lexer-Grammatik eingegeben wurden (von oben nach unten).

    
Bart Kiers 23.03.2010 07:37
quelle
2

Der größte Unterschied ist einer, der dir vielleicht egal ist. Wenn sich Ihre Lexer-Regeln im Lexer befinden, können Sie die Vererbung verwenden, um mehrere Lexer-Shares mit einem gemeinsamen Satz lexikalischer Regeln zu teilen.

Wenn Sie in Ihren Parser-Regeln nur Zeichenfolgen verwenden, können Sie dies nicht tun. Wenn Sie Ihre Lexergrammatik nie wiederverwenden möchten, spielt dieser Vorteil keine Rolle.

Außerdem bin ich, und ich vermute die meisten Antlr-Veteranen, eher daran gewöhnt, die Lexer-Regeln in der eigentlichen Lexer-Grammatik zu finden, anstatt mit der Parser-Grammatik gemischt zu werden. Man könnte also argumentieren, dass die Lesbarkeit durch das Einfügen der Regeln erhöht wird der Lexer.

Es gibt keine Auswirkung auf die Laufzeitleistung, nachdem der Antlr-Parser für beide Ansätze erstellt wurde.

    
chollida 24.03.2010 19:43
quelle
1

Der einzige Unterschied besteht darin, dass in Ihrer ersten Produktionsregel die Schlüsselworttoken implizit definiert sind. Es gibt keine Auswirkung auf die Laufzeitleistung für Token, die implizit oder explizit definiert sind.

    
Will 23.03.2010 07:29
quelle
0

Noch ein weiterer Unterschied: Wenn Sie Ihre Lexerregeln explizit definieren, können Sie über den Namen, den Sie ihnen gegeben haben, darauf zugreifen (z. B. wenn Sie nach einem bestimmten Tokentyp suchen). Andernfalls verwendet ANTLR willkürliche Nummern (mit einem Präfix).

    
Mike Lischke 21.09.2015 09:12
quelle

Tags und Links