2017-08-18 2 views
0

Derzeit tokenize ich die Java8.g4 von Java 8 aus diesem Repo bin mit: https://github.com/antlr/grammars-v4Wie Java8 Programm antlr

Aber ich frage mich, wie kann ich die Java8.g4 sicherstellen Datei ändern, wenn Ich begegne mehreren neuen Zeilen, die ich nur eine von ihnen in Tokenize?

Siehe: Parsing Newlines, EOF as End-of-Statement Marker with ANTLR3, ich neue Zeile in der Parsing-Baum hinzufügen können (durch NEWLINE: ('\r\n'|'\n'|'\r') zum .g4 Datei hinzufügen Wenn ich jedoch mehrere neue Linien haben, werden mehrere Zeilen analysiert und zu dem Baum hinzugefügt, die nicht ist. was ich will.

Hoffnung jemand mir heraus!

+0

Sie können nicht einfach die EOS (Semikolon, ich vermute) aus der Grammatik entfernen: es würde ein großes mehrdeutiges Chaos werden. –

+0

In java8.g4 im Repo, das ich oben gepostet habe, fügt es seiner Token-Liste kein "\ n" hinzu. Was ich versuche, ist es, es der Liste hinzuzufügen und möglicherweise "\ n" durch EOF zu ersetzen. Ich bin mir nicht sicher, ob es möglich ist. – teddy

+0

Okay, also versuchen Sie nicht, EOS zu entfernen (nicht EOF?), Sondern stattdessen zu ersetzen. Probieren Sie es aus und überzeugen Sie sich selbst. Wenn Sie nicht weiterkommen, können Sie eine spezielle Frage zu SO stellen. Viel Glück! –

Antwort

1

ich denke, man die Whitespaces bedeuten kann helfen

Dank nicht in der Token-Liste von den Lexer produzierte gehalten, nicht wahr? Dies geschieht, wenn Leerzeichen übersprungen in der Grammatik überprüfen Sie zum Beispiel

WS: [ \t] -> skip; 

und dass

WS: [ \t] -> channel(HIDDEN); 

diese Weise ändern, die Whitespaces auf dem verborgenen Kanal gehalten werden und Sie können sie über die CommonTokenStream Instanz lesen, aber nicht bekommen, in der Art und Weise (wie bei skip) .

+0

Sorry, vorher bin ich mir nicht ganz sicher, was ich fragen möchte. Jetzt habe ich die Frage geändert, hoffe du kannst mir helfen! – teddy