Оставил рекурсию и оставил факторинг - какой идет первым?

cs.stackexchange https://cs.stackexchange.com/questions/2696

Вопрос

Если у меня есть грамматика, имеющая постановку, которая содержит оба рекурсии и оставил факторинг, как

$ qquad displaystyle f to fba mid cds mid c $

Какой из них имеет приоритет, левую рекурсию или левую факторинг?

Это было полезно?

Решение

Преобразования, такие как левое факторинг или удаление левой рекурсии, не имеют правил приоритета. Очевидно, что полученные грамматики могут быть разными, но они распознадут один и тот же язык.

Пример вопроса о грамматике сложнее, чем типичная проблема с домашним заданием для студентов. Так что показывать нашу работу будет полезно.

Левая рекурсия

Давайте определим преобразование, которое удаляет левую рекурсию.

Данный

$ qquad displaystyle a to a alpha_0 mid a alpha_1 mid dots mid a alpha_n mid b beta_0 mid b beta_1 mid dots mid b beta_n $,

Мы удаляем левую рекурсию, как это:

$ qquad displaystyle begin {Align} a_h & to b beta_0 mid b beta_1 mid dots mid b beta_n a_t & to alpha_0 mid alpha_1 mid dots mid alpha_n a_ {t^+} & to a_t a_ {t^+} mid a_t a & to a_h a_ {t^+} mid a_h end {Align} $

Общность вышеупомянута обычно не приведена в текстах компилятора, но такие тексты, как Grune & Jacobs, это покрывают. Левый факторинг может быть применен к вышеуказанной трансформированной грамматике, но будет просто представить дополнительные правила, которые не изменит ответ. Итак, мы будем упрощать Презентация без дополнительного левого факторинга выполняется.

В этом ответе мы не будем охватывать косвенные проблемы левой рекурсии, потому что нас обеспокоены только единичными правилами, не являющимися терминалом. Обратите внимание, что не косвенная левая рекурсия может быть рассмотрено. (Откройте отдельный вопрос, если это важно.)

Оставил факторинг

Удаление левого факторинга находится в большинстве вступительных текстов компилятора, сделанных так. Данный

$ qquad displayStyle a to xy mid xz $

оставлено доход от факторинг:

$ qquad displaystyle begin {align} a_s & to y mid z a & to x a_s end {align} $

Теперь это выполняет преобразования в обоих порядках.

Оставил сначала факторинг

Давайте оставим фактор грамматики вопроса

$ qquad displaystyle begin {align} f_s & to ds mid varepsilon f & to fb a mid c f_s end {align} $

а затем удалите левую рекурсию:

$ qquad displaystyle begin {align} f_h & to c f_s f_t & to b a f_ {t^+} & to f_t f_ {t^+} | F_t f_s & to ds mid varepsilon f & to f_h f_ {t^+} mid f_h end {align} $

Сначала удаление левой рекурсии

И для другого упорядочения, давайте удалим левую рекурсию из грамматики вопроса

$ qquad displaystyle begin {align} f_h & to c ds mid c f_t & to b a f_ {t^+} & to f_t f_ {t^+} mid f_t F & to f_h f_ {t^+} mid f_h end {Align} $

а затем ушел фактор терминала $ C $:

$ qquad displaystyle begin {Align} f_ {hs} & to ds mid varepsilon f_h & to c f_ {hs} f_t & to b a f_ {t^+} & & & & & to f_t f_ {t^+} mid f_t f & to f_h f_ {t^+} mid f_h end {align} $

Ага, полученные грамматики одинаковы!

В целом, доказывая, что две грамматики эквивалентны неразрешимы. Так что, если серии грамматических преобразований могут повлиять на Язык, который признан Тогда это будет катастрофическим.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с cs.stackexchange
scroll top