I'm trying to eliminate left recursion from the following extract of a grammar -
expression := fragment ( ( + | - | * | / ) fragment )*
fragment := identifier | number | ( + | - ) fragment | expression
The issue is that expression can go to fragment, can go to expression. I've tried a bunch of ways to eliminate it, some look like they work (in JavaCC) but I'm a)unsure of their correctness, and b) pretty sure I've broken associativity by changing the structure of the grammar.
I'm pretty sure I need an expression', and have
fragment := identifier | number | ( + | - ) fragment | expression
changed to
fragment := identifier | number | ( + | - ) fragment | expressionPrime
But I'm unsure of the way to form expressionPrime. Both
expressionPrime := identifier | number | ( + | - ) fragment | {}
And
expressionPrime := ( ( + | - | * | / ) fragment )*
Seem to work, but I know it can't be both.
Any ideas would be much appreciated, even a point in the right direction.
expression
infragment
at all? – user2357112 supports Monica