在ANTLR中需要匹配的括号

时间:2018-09-23 18:08:45

标签: grammar antrl4

我知道我可以在ANTLR4中使用吗? 0或1次。但是例如对于标识符,用户可以使用括号,也可以不使用括号。但是如果我这样做

'('? identifier ')'?

解析器将允许诸如:'(x' or 'y)'之类的语句,而不要求(x)。在ANTLR4中定义语法时,是否有方法需要匹配的括号

2 个答案:

答案 0 :(得分:1)

您可以定义一个带有两个括号的替代方案,也可以定义一个不带括号的替代方案,例如

expression: 
    '(' identifier ')'
    | identifier
;

答案 1 :(得分:1)

如果您想允许'('和')'之间的标识符或不带括号的标识符,则可以简单地使用两个替代方法代替?运算符:

'(' identifier ')' | identifier

请注意,这仅允许使用一组括号。要允许任意数字,您将使用类似以下的递归规则:

identfiierWithParens
    : '(' identifierWithParens ')'
    | identifier
    ;

由于在大多数语言中,任意表达式都可以用括号括起来(并且只有当标识符用作表达式或可以这样被括号化的其他实体时,标识符才可以),因此通常将其作为{{ 1}}规则代替:

expression