Parsowanie wyrażeń boolowskich bez rekurencji lewej ręki
Próbuję to dopasować
f(some_thing) == 'something else'
f (some_thing) jest wywołaniem funkcji, które jest wyrażeniem== jest operatorem boolowskim'coś innego' jest ciągiem, który również jest wyrażeniemwięc wyrażenie logiczne powinno być
expression operator expression
Problem polega na tym, że nie mogę wymyślić, jak to zrobić bez lewej rekursji. To są moje zasady
expression
=
bool_expression
/ function_call
/ string
/ real_number
/ integer
/ identifier
bool_expression
= l:expression space* op:bool_operator space* r:expression
{ return ... }
Mam notację gramatyczną
O := ==|<=|>=|<|>|!= // operators
E := B|.... // expression, many non terminals
B := EOE
Ponieważ moja gramatyka to EOE, nie wiem, jak użyć algorytmu lewej ręki, który jest
A := Ab|B
transforms into
A := BA'
A':= e|bA
Gdzie e jest puste, a b to terminal