我可以指定特定的解析器规则来跳过空白吗?

时间:2016-09-07 05:37:27

标签: java antlr antlr4 dsl

G4:

WS: [\r\n \t] -> skip;

这意味着跳过所有空白。但在某些特定情况下,我只需要一些规则来分析时跳过空白。

如何指定特定的解析器规则以跳过空白?感谢您的评论。

我更新了问题:

G4:

WS: [\r\n \t] -> skip;
String:[a-zA-Z]+;

stringline:'"' String '"';

会将myText:

"aaaa bbbb"

如你所见,我需要将“aaaa bbb”重新标记为跳过空白的“字符串”,我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

Parser和lexer是独立的。您无法从解析器中引导词法分析器。所以要么你跳过所有的空格,要么你不必在每个规则(lexer + parser)中明确地处理它们。

考虑一下你的解决方案,如果真的需要这种特殊的空间处理等,也许更好。重新定义你想要解析的语言(如果你能够做到这一点)?

<强>更新

从你改变你的问题看起来好像你在问如何在字符串中保留空格,这就是为什么Bart建议创建一个包含外部引号和其中可能的空格的特定词法分析器规则的原因。但是,您应该将WS规则移到远离语法的位置,这样它就不会“偷”&#34;来自其他规则的空白。通常,WS规则是词法分析器语法中的最后一个规则(因为顺序在语法文件中很重要)。