У меня есть небольшая проблема с этим упражнением.Составители: изменение неоднозначной грамматики
С учетом этой грамматики:
S -> aX | X
X -> aXb | b | eps
) показывает, что она неоднозначна со строкой
б) сказать, что язык отражает грамматику
с) изменить грамматику и построить потомка синтаксический анализатор
Решение от меня:
a) Я показывает неоднозначное со строкой «аб»:
- S -> aX -> ab
- S -> X -> aXb -> ab
б) грамматика захватывает этот язык:
L = {a^n b^n: n >= 0} U {a^n b^m: n=m+1, n,m >= 0} U {a^n b^m: m=n+1, n,m >= 0}
с) моя проблема заключается в изменении грамматики построить анализатор. Я пробую разные грамматики, но они также неоднозначны. Например, это:
- G -> X$
X -> aX' | b | eps
X' -> XB | eps
Можете ли вы помочь мне найти правильную грамматику для осуществления или дайте мне вход?
Производство может быть X -> a | б. Но при этом производстве грамматика порождает конфликты в таблице разбора для синтаксического анализа сверху вниз. Вы думаете, другое производство? – Federico
@federico: на самом деле это должно быть 'X -> a | b | ε'; в противном случае сбалансированные строки были бы невозможны. Это однозначно, но не LL (k). (Это не LR (k).) Грамматика LL (1) сложнее, но возможно; подумайте о деконструкции языка в префикс и суффикс максимальной (конечной) длины. – rici