问题描述
看不懂这个圆括号的意思。 没必要写,但有时会产生左递归错误。我们应该在语法规则中的什么地方使用它?
解决方法
没必要写,
没错,没必要。只需删除它们。
但有时会产生左递归错误。
如果确实如此,您可以在此处打开问题:https://github.com/antlr/antlr4/issues
编辑
看到 kaby76 的评论,只是为了确保:无论如何,您都不能将它们从语法文件中删除。它们可以从您的示例规则中删除。
像这样使用时:
rule
: ID '=' ( NUMBER | STRING ) // match either `ID '=' NUMBER`
// or `ID '=' STRING`
;
它们不能被移除,因为移除它们会导致:
rule
: ID '=' NUMBER | STRING // match either `ID '=' NUMBER`
// or `STRING`
;
或重复:
rule
: ( ID STRING )+ // match: `ID STRING ID STRING ID STRING ...`
;
还有这个:
rule
: ID STRING+ // match: `ID STRING STRING STRING ...`
;