У меня есть следующая грамматика:Изготовление грамматики LL (1)
S → a S b S | b S a S | ε
Поскольку я пытаюсь написать для него небольшой компилятор, я бы хотел сделать это LL (1). Я вижу, что здесь существует конфликт FIRST/FOLLOW, и я знаю, что мне нужно использовать подстановку для его решения, но я не совсем уверен, как это сделать. Вот моя предложенная грамматика, но я не уверен, что она правильная:
S-> aSbT | epsilon
T-> bFaF | эпсилон
F-> эпсилон
Может кто-то помочь?
Спасибо за ваш полезный ответ. Мне также было любопытно, что вы думаете о грамматике, которую я предлагал, - мне кажется, что это также LL (1) и не так сильно отличается от Кнута. Я также не вижу никаких строк, для которых это может потерпеть неудачу. –
@ JohnRoberts- Я не думаю, что ваша грамматика работает правильно - например, она не может получить строки, начинающиеся с 'b'. – templatetypedef