首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带负号和算子的Antlr4问题

带负号和算子的Antlr4问题
EN

Stack Overflow用户
提问于 2022-05-11 13:41:00
回答 2查看 41关注 0票数 -1

你好,我们有这个antlr4树分析器:

代码语言:javascript
复制
grammar calc;

calculator: (d)*;

c
    : c '*' c
    | c '/' c
    | c '+' c
    | c '-' c
    | '(' c ')'
    | '-'? 
    | ID
    ;
d: ID '=' c;

NBR: [0-9]+; 
ID:  [a-zA-Z][a-zA-Z0-9]*;

WS: [ \t\r\n]+ -> skip; 

问题是,如果我使用-,antlr4不识别,如果它是ja符号还是特殊输入的运算符,比如:(-2-4)*4。对于像这样的输入,antlr4不明白-在2之前属于常数2,而-不是运算符。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-11 15:16:41

就像这样做:

代码语言:javascript
复制
c
 : '-' c
 | c ('*' | '/') c
 | c ('+' | '-') c
 | '(' c ')'
 | ID
 | NBR
 ;

这样,所有这些就可以了:

  • -1
  • - 2
  • -3-4
  • 5+-6
  • -(7*8)
  • (-2-4)*4

例如,对(-3-10)*10的解析如下:

编辑

这就是我解析9+38*(19+489*243/1)*1+3时所发生的事情

票数 1
EN

Stack Overflow用户

发布于 2022-05-11 14:52:06

代码语言:javascript
复制
    | '-'? 

应:

代码语言:javascript
复制
    | '-'? NBR

您需要指定它是一个可能(或不)前面有一个-的NBR

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72202135

复制
相关文章

相似问题

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