2016-12-13 2 views
1

Я видел это сообщение о том, как преобразовать бесконтекстный грамматик ДКУ: Automata theory : Conversion of a Context free grammar to a DFAМожно ли преобразовать все контекстные свободные грамматики в NFA/DFA?

Однако, просто интересно, могут все контекстные свободные грамматики быть преобразованы в DFA/NFA? Что относительно контекстных свободных грамматик, которые не могут быть выражены как регулярное выражение? Ex. S -> (S) |()

Спасибо!

ответ

1

Только обычные языки могут быть преобразованы в DFA, и не все CFG представляют собой обычные языки, в том числе и в вопросе.

Таким образом, ответ «нет».

NFAS не более выразительный, чем ДКА, поэтому приведенное выше утверждение будет по-прежнему верно, если вы заменили DFA с NFA

CFG представляет собой регулярный язык, если он является правым или левым линейно. Но тот факт, что CFG не левый или правый-линейный, ничего не доказывает. Например, S→a | a S a происходит с тем же языком, что и S→a | S a a.

+0

http://hackingoff.com/images/basic-bottom-up-parser/2016-12-13_18-37-59_-0800-dfa.svg Просто натолкнись на это и теперь немного смущайся о DFA для LR (0) парсер. Является ли DFA для LR (0) парсером преобразование для контекстной свободной грамматики? Или это просто помогает построить парсер LR (0) (получил несколько состояний финиширования)? – ssssay

+0

@ssssay: Хотя эта страница описывает его график как DFA, то, что управляет парсером LR, действительно является КПК (пусковой автомат), который не является F (конечным). Переходы push не отображаются, и «принимающие» состояния фактически являются переходами поп-музыки (которые нельзя графовать, поскольку они зависят от содержимого стека в этой точке). Легко видеть, что это так; вам нужно только попробовать обработать вход с помощью этой машины. (А также не все CFG являются LR (0) или даже LR (k).) – rici

Смежные вопросы