我知道在ANTLR4中我可以使用它吗?0次或1次。但是例如对于标识符,用户可以使用括号,也可以不使用括号。但如果我这么做
'('? identifier ')'?
解析器将允许像:'(x' or 'y)'
这样的语句,而不需要(x)
。在ANTLR4中定义语法时,有没有一种要求使用匹配括号的方法
发布于 2018-09-24 02:11:45
您可以定义带括号的备选方案,也可以定义不带括号的备选方案,例如
expression:
'(' identifier ')'
| identifier
;
发布于 2018-09-24 02:16:12
如果你想允许标识符在'(‘和')’之间或者没有括号,你可以简单地使用两个替代方案来代替?
运算符:
'(' identifier ')' | identifier
请注意,这将只允许使用一组括号。要允许任意数字,您可以使用如下递归规则:
identfiierWithParens
: '(' identifierWithParens ')'
| identifier
;
因为在大多数语言中,任意表达式都可以用括号括起来(标识符只有在用作表达式或其他可以用括号括起来的实体时才能用括号括起来),所以通常应该将其作为expression
规则的一部分来处理:
expression
: identifier
| '(' expression ')'
| // other types of expression
;
https://stackoverflow.com/questions/52468908
复制相似问题