繁体   English   中英

基本算术语法——处理括号

[英]Basic arithmetic grammar -- handling parentheses

我编写了以下代码来处理算术中的基本二进制运算:

grammar Calc;

expression
    : OPERAND (BIN_OP expression)*
    ;

// 12 or .12 or 2. or 2.38
OPERAND
    : [0-9]+ ('.' [0-9]*)?
    | '.' [0-9]+
    ;

BIN_OP
    : [-+/*]
    ;

现在我可以执行以下操作:

0.9+2.4*3.6

但是,antlr 通常如何处理操作顺序和括号? 例如:

  • 如果我想写(0.9+2.4)*3.6怎么办,我该怎么做呢?
  • 或者,如果我想写((0.9+2.4)*3.6)怎么办?
  • 最后,要捕获不匹配括号的无效情况, (((((0.9+2.4)*3.6))

在antlr中通常如何处理?

ANTLR4 带来的真正好处之一是能够通过规则中的替代排序轻松表示优先级。

尝试类似:

grammar Calc;

expression
    : '(' expression ')' # parenExpr
    : expression (MUL_OP | DIV_OP) expression # mulDivExpr
    : expression (ADD_OP | SUB_OP) expressions # addSubExpr
    : OPERAND # operandExpr
    ;

// 12 or .12 or 2. or 2.38
OPERAND
    : [0-9]+ ('.' [0-9]*)?
    | '.' [0-9]+
    ;

SUB_OP: '-';
ADD_OP: '+';
DIV_OP: '/';
MUL_OP: '*';
    ;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM