Связь между левым разложением грамматики и удалением эпсилон

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

 S -> a | aB

если я выполню на нем левый факторинг, это будет похоже на (e - эпсилон)

 S -> aC
 C -> B | e 

затем я хочу удалить эпсилон, который в конечном итоге выглядит как

 S -> a | aC
 C -> B

обратите внимание, что похоже, что мне снова нужно выполнить левое разложение, и при этом бесконечное левое разложение и удаление эпсилон туда и обратно. Я делаю что-то неправильно ??

Требуется ли удалить как левый факторинг, так и эпсилон в грамматике для компилятора?


person REALFREE    schedule 30.11.2012    source источник


Ответы (1)


В большинстве случаев вам не нужно выполнять какое-либо преобразование. На самом деле, для некоторых грамматик факторизация слева будет создавать конфликты сдвиг-свертка для генераторов синтаксических анализаторов LALR(1).

person rici    schedule 01.12.2012