Реализация преобразователя ll (k) в ll (1)! - PullRequest
0 голосов
/ 10 июня 2010

есть ли реализация преобразователя ll (k) в ll (1)?

1 Ответ

4 голосов
/ 10 июня 2010

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 ;

Хитрость заключается в том, как обработать перевод правил действия; если ваш язык поддерживает это, лямбды могут быть там полезны.

...