我想用C語法創建AST,可以找到here。用c語法構建ast時管理操作優先級
l = k*j*5 - 10;
我得到這樣的:然而,它沒有當我輸入驗證碼考慮與業務優先級,對於爲例
:的操作是用這個編碼管理
multiplicative_expression
: primary_expression (('*'^ additive_expression) | ('/'^ additive_expression) | ('%'^ additive_expression))*
;
additive_expression
: multiplicative_expression (('+'^ multiplicative_expression) | ('-'^ multiplicative_expression))*
;
有沒有解決這個問題的方法?
另一個問題,有沒有辦法在構建AST時添加特殊標記? 例如是這樣的:
A B C -> ^("VAR" B C)
VAR是新的令牌只能與AST可以看出。
是否有可能通過別的方法重命名'nil'標記?
您對'multiplicative_expression'的產物是錯誤的。 – 2013-03-09 16:16:39
我想也是這樣,但我不知道它爲什麼是錯的。 – Exia0890 2013-03-09 17:54:41
由於加法(和減法)的優先級比乘法(和除法)低,因此不能將「additive_expression」作爲乘法表達式的因子。該作品稱'2 * 3 + 4'應該被解釋爲'2 *(3 + 4)'。如果你在該生產中用'multiplicative_expression'替換'additive_expression',你將會解決這個問題。然而,你仍然有問題:24/4/2被解釋爲24 /(4/2),它應該是'(24/4)/ 2'。我不確定如何解決這個問題。 – 2013-03-09 18:13:23