簡體   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