IIRC; в общем, нет, потому что в некоторых языках есть ll (k) грамматик, но нет ll (1) грамматик. Поэтому, если я не ошибаюсь, не все ll (k) могут быть преобразованы в ll (1). Тем не менее, это ничего не говорит о возможности такого инструмента, который будет работать в тех случаях, когда это может быть сделано.
правило для левого факторинга:
A := A B |
A C |
D |
E ;
превращается в:
A := (D | E) (B | C)*
или если вы не разрешите ()
групп и *
:
A := D A'
E A'
A' := B A' |
C A' |
nul ;
Хитрость заключается в том, как обработать перевод правил действия; если ваш язык поддерживает это, лямбды могут быть там полезны.