[英]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.