首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在ANTLR中需要匹配的圆括号

在ANTLR中需要匹配的圆括号
EN

Stack Overflow用户
提问于 2018-09-24 02:08:45
回答 2查看 582关注 0票数 1

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

代码语言:javascript
运行
复制
'('? identifier ')'?

解析器将允许像:'(x' or 'y)'这样的语句,而不需要(x)。在ANTLR4中定义语法时,有没有一种要求使用匹配括号的方法

EN

回答 2

Stack Overflow用户

发布于 2018-09-24 02:11:45

您可以定义带括号的备选方案,也可以定义不带括号的备选方案,例如

代码语言:javascript
运行
复制
expression: 
    '(' identifier ')'
    | identifier
;
票数 1
EN

Stack Overflow用户

发布于 2018-09-24 02:16:12

如果你想允许标识符在'(‘和')’之间或者没有括号,你可以简单地使用两个替代方案来代替?运算符:

代码语言:javascript
运行
复制
'(' identifier ')' | identifier

请注意,这将只允许使用一组括号。要允许任意数字,您可以使用如下递归规则:

代码语言:javascript
运行
复制
identfiierWithParens
    : '(' identifierWithParens ')'
    | identifier
    ;

因为在大多数语言中,任意表达式都可以用括号括起来(标识符只有在用作表达式或其他可以用括号括起来的实体时才能用括号括起来),所以通常应该将其作为expression规则的一部分来处理:

代码语言:javascript
运行
复制
expression
    : identifier
    | '(' expression ')'
    | // other types of expression
    ;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52468908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档