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żeniem

wię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

questionAnswers(1)

yourAnswerToTheQuestion