如何使用 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)。
目前我正在使用此存储库中 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)。