7
我試圖匹配該解析布爾表達式沒有左手遞歸
f(some_thing) == 'something else'
- F(SOME_THING)是一個函數調用,它是一種表達
- ==是一個布爾運算符
- '別的東西'是一個字符串,它也是一個表達式
所以布爾表達式應該是
expression operator expression
問題是我無法弄清楚如何做到這一點沒有左遞歸 這是我的規則
expression
=
bool_expression
/function_call
/string
/real_number
/integer
/identifier
bool_expression
= l:expression space* op:bool_operator space* r:expression
{ return ... }
使用語法符號,我有
O := ==|<=|>=|<|>|!= // operators
E := B|.... // expression, many non terminals
B := EOE
因爲我的語法是EOE我不知道如何去用左手算法是
A := Ab|B
transforms into
A := BA'
A':= e|bA
其中E是空的,b是終端
謝謝你的好先生,這作品!在回答這個問題之前,我確實發現瞭如何去做,並準備發佈它,但是你做了一件很棒的工作:P – gosukiwi 2013-03-22 23:38:50