Достаточно ли S-грамматика, чтобы генерировать все возможные DCFL?

cs.stackexchange https://cs.stackexchange.com/questions/127155

Вопрос

в S-грамматике Все производства в форме генеракодицетагкода

"... и любая пара (а, а) происходит самое большее время в P." [p. Линц, 6 ред. , п. 144]

S-грамматика однозначно, и я думаю, что (не уверен) мы можем описать все однозначно-CFL по S-грамматике. Я хочу знать Can S-грамматика описывает все возможные DCFL или нет? Согласно этому предложению, я думаю, что мы не можем сделать это, но я не уверен, что:

К сожалению, не все функции типичного языка программирования могут быть выражены S-грамматикой. [p. Линц, 6 ред. , п. 152]

Но Все языки, которые описываются S-грамматикой, является детерминированным .

Я говорю это, потому что мы можем сделать 2-го числа DPDA для любой простой грамматики с этим определением:

R ≝ Production Rules of CFG
(x,y,"LBL") is a labeled-edge between x and y with “LBL” as a label 
∀r∊R: r= (A,aⱰ) ( A∊V ⋀ a∊T ∧ Ɒ∊V*) add (q,q,"a,A/Ɒ") to E
Add (q,q,"ε,z/Sz′") to E
Add (q,f,"ε,z′/z′") to E
.

Если есть какие-либо DCFL, что мы не можем предоставить S-грамматику для него, покажи мне, что пожалуйста, и поправьте меня, если я ошибаюсь.

спасибо.

Это было полезно?

Решение

На самом деле примером языка, не принятого, может быть довольно простым, из-за технической. Язык $ a ^ * $ не генерируется S-грамматикой.

Фактически, S-грамматика не может генерировать $ \ varepsilon $ . Чтобы удалить $ S $ из стека, мы должны применять хотя бы одну продукцию, и любая добыча будет производить символ терминала.

Но даже если мы видим это как техническое средство, мы не можем генерировать две строки, один из которых является префиксом другого. Если мы можем генерировать строку $ \ alpha $ , который тогда принимается, потому что все иверки были переписаны (стек содержит только новый $ Z '$ ), то как бы мы создадим более длинную строку $ \ alpha \ beta $ ? Это должно соответствовать той же вычислению изначально.

Это тот случай, потому что PDA, который вы производите, на самом деле является КПК с пустым приемом стека: когда стек пуст (или фактически имеет только $ Z '$ ) Мы должны принять. Хорошо известно, что DetriniSistice PDA с пустым приемным стеком может генерировать только без префикс языки. Addingan Cont-String-маркер обычно является лекарством.

Свойство в реальном времени (чтение символа каждый шаг) - большая проблема. Рассмотрим язык $ \ {a ^ ib ^ jc ^ i \ mid i, j \ ge 1 \} \ cub \ {a ^ ib ^ jd ^ j \ mid i, j \ GE 1 \} $ . Это может быть принято DPDA. Push $ a $ 's, push $ B $ 's. Затем при чтении $ C $ мы попметим $ B $ 's и сравните <класс SPAN= «Математический контейнер»> $ a $ 's и $ C $ 's. В противном случае при чтении $ d $ мы сравниваем $ d $ с

class=" Математический контейнер "> $ b $ с использованием стека. Таким образом, вам нужно поплывание символов стека без ввода чтения. PDA в реальном времени не может сделать это (и ни S-грамматики). Источник, который я знаю для этого, относится к Autebert, Berstel, BoAsson: между контекстными языками и автоматами в Руководстве формальных языков.

Конечно, КПК имеет только одно состояние. Мне нужно проверить: кажется, что также единое ограничение состояния снижает принятые языки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с cs.stackexchange
scroll top