我正在尝试匹配这个
f(some_thing) == 'something else'
- f(some_thing)是一个函数调用,它是一个表达式
- ==是一个布尔运算符
- 'something else'是一个字符串,也是一个表达式
所以布尔表达式应该是
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 为终端