Чтобы показать, что грамматика неоднозначна, вы должны иметь возможность построить два разных дерева синтаксического анализа при разборе одной и той же строки. Ваша строка будет состоять из «(», «)», «,» и «a», так как это единственные символы терминала в грамматике.
Попробуйте выполнить эти четыре символа терминала несколькими способами и посмотреть, сможете ли вы показывать разные успешные парсы в духе example ambiguous grammar on Wikipedia.
Немедленная левая рекурсия имеет тенденцию вызывать проблемы для некоторых парсеров. Смотрите, если «а, а, а» делает что-нибудь интересное на «L → L, S | S» ...
мое беспокойство здесь язык, порождаемый этой грамматикой, как регулярное выражение, оно может быть описано ... Я не понимаю, как это сделать
Регулярное выражение не может полностью описать грамматику. Перезапись часть грамматики сделает это более очевидными:
- S → (L)
- S →
- L → L, S
- L → S
Обратите внимание на # 1 и # 4. L может производить S, а S может производить (L). Это означает, что S может производить (S), который может производить ((S)), (((S))) и т. Д. До бесконечности. Главное, чтобы скобки совпадали; есть такое же количество символов («символы как»).
Регулярное выражение не может этого сделать.
Регулярные выражения относятся к конечным автоматам. Конечные автоматы не могут рассчитывать. A Язык L ∈ {w: 0 n n} не является регулярным. L ∈ {w: (n) n}, просто быть заменой "(" для "0" и ")" для "1" также не является. См. Первый раздел примеров под номером Regular Languages - Wikipedia. (Нотация примечание: s является S, S является сс, ..., с п в ы повторяется п раз.)
Это означает, что вы не можете использовать регулярные выражения, чтобы описать ту часть языка. Это ставит его в область CFG, Turing Machines и pushdown automata.