Они будут такими же. Например, <C>
будет соответствовать всем следующим:
c
c c
c c c
c c c c c c c c c c c c c c c c c c c c c
И <A>
будет соответствовать всем следующим:
a
a a
a a a
a a a a a a a a a a a a a a a a a a a a a
В результате EBNF для обоих будет соответствовать. В общем, если левая рекурсия находится в самом начале, а правая рекурсия - в самом конце, они будут выглядеть примерно так:
<A> -> a | a <A>
<C> -> c | <L> c
EBNF:
<A> -> a | a a*
<A> -> a+
<C> -> c | c* c
<C> -> c+
Чего эта грамматика EBNF не делает express, как выражение анализируется При переходе от BNF к EBNF вы теряете выразительность. Однако вы можете сделать это явно, избегая +
:
<A> -> a a*
<C> -> c* c
. Конечно, тот факт, что оба сокращаются до E+
, означает, что вы можете анализировать их как леворекурсивные или праворекурсивные, и результат не имеет значения. Это не всегда так - (2-3)-4 ≠ 2-(3-4)
, но у вас есть возможность конвертировать <C>
в правильно-рекурсивное производство, и результат будет таким же.