簡體   English   中英

用PEG.js解析計算

[英]parsing calculation with PEG.js

我正在嘗試使用peg.js庫來解析數學表達式。 我把以下語法放在網上peg.js

start
    = any

additive
    = left:primary "+" right:any { return left + right; }

multiplicative
    = left:primary "*" right:any { return left * right; }

any
    = multiplicative
    / additive
    / primary

primary
    = float
    / integer
    / "(" any:any ")" { return any; }
    / "" { return 0; }

float "float"
    = left:[0-9]+ "." right:[0-9]+ { return parseFloat(left.join("") + "." +   right.join("")); }

integer "integer"
     = digits:[0-9]+ { return parseInt(digits.join(""), 10); }

但是當我試圖計算: 3*5+1我得到18

我認為下面的代碼就是你所追求的。

訣竅是讓你最弱的運算符(+)有一個引用乘法規則的規則,這樣加法就不會發生,直到乘法匹配,這反過來不會發生,直到主表達式匹配。

start
    = any

any
    = additive

additive
    = left:multiplicative "+" right:additive { return left + right; }
    / multiplicative

multiplicative
    = left:primary "*" right:multiplicative { return left * right; }
    / primary


primary
    = float
    / integer
    / "(" any:any ")" { return any; }
    / "" { return 0; }

float "float"
    = left:[0-9]+ "." right:[0-9]+ { return parseFloat(left.join("") + "." +   right.join("")); }

integer "integer"
     = digits:[0-9]+ { return parseInt(digits.join(""), 10); }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM