【问题标题】:How to tokenize Java8 program using antlr如何使用 antlr 标记 Java8 程序
【发布时间】:2017-08-18 07:56:08
【问题描述】:

目前我正在使用来自此 repo 的 java 8 的 Java8.g4: https://github.com/antlr/grammars-v4

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

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

希望有人能帮帮我!

谢谢

【问题讨论】:

  • 你不能只从语法中删除 EOS(我猜是分号):它会变成一大堆模棱两可的烂摊子。
  • 在我上面发布的 repo 中的 java8.g4 中,它没有将“\n”添加到其令牌列表中。我想要做的是将它添加到列表中,并可能用 EOF 替换“\n”。我不确定这是否可能。
  • 好的,所以您不是要删除 EOS(不是 EOF?)而是替换它。试试看,自己看看。如果您遇到困难,请随时就 SO 提出具体问题。祝你好运!

标签: antlr


【解决方案1】:

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

WS: [ \t] -> skip;

并将其更改为

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

这样,空白将保留在隐藏通道中,您可以通过 CommonTokenStream 实例读取它们,但不要妨碍(就像跳过一样)。

【讨论】:

  • 对不起,之前我不太清楚我想问什么。现在我已经修改了问题,希望你能帮助我!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 2017-10-26
  • 2017-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多