如何使用 antlr 标记 Java8 程序

How to tokenize Java8 program using antlr

目前我正在使用此存储库中 java 8 的 Java8.g4: https://github.com/antlr/grammars-v4

但是,我想知道如何修改 Java8.g4 文件 以确保如果我遇到多个新行我只标记其中一个

参考:Parsing Newlines, EOF as End-of-Statement Marker with ANTLR3,我可以向解析树添加新行(通过将NEWLINE: ('\r\n'|'\n'|'\r')添加到.g4文件。但是,如果我有多个新行,则多行将是解析并添加到树中,这不是我想要的。

希望有人能帮帮我!

谢谢

我猜你的意思是空格没有保留在词法分析器生成的标记列表中,对吧?当语法中的空格被跳过时,就会发生这种情况。检查它例如

WS: [ \t] -> skip;

并将其更改为

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

通过这种方式,空格保留在隐藏通道中,您可以通过 CommonTokenStream 实例读取它们,但不要妨碍(就像 skip)。