我知道我可以在ANTLR4中使用吗? 0或1次。但是例如对于标识符,用户可以使用括号,也可以不使用括号。但是如果我这样做
'('? identifier ')'?
解析器将允许诸如:'(x' or 'y)'
之类的语句,而不要求(x)
。在ANTLR4中定义语法时,是否有方法需要匹配的括号
答案 0 :(得分:1)
您可以定义一个带有两个括号的替代方案,也可以定义一个不带括号的替代方案,例如
expression:
'(' identifier ')'
| identifier
;
答案 1 :(得分:1)
如果您想允许'('和')'之间的标识符或不带括号的标识符,则可以简单地使用两个替代方法代替?
运算符:
'(' identifier ')' | identifier
请注意,这仅允许使用一组括号。要允许任意数字,您将使用类似以下的递归规则:
identfiierWithParens
: '(' identifierWithParens ')'
| identifier
;
由于在大多数语言中,任意表达式都可以用括号括起来(并且只有当标识符用作表达式或可以这样被括号化的其他实体时,标识符才可以),因此通常将其作为{{ 1}}规则代替:
expression