Які хороші позначення для детермінованих без контексту та помітно мов витіснення є


10

Детерміновані без контекстні мови (DCFL) та видимо висувні мови (VPL) - це як набір формальних мов між без контекстними мовами (CFL), так і звичайними мовами (REG). Чи є читабельні позначення, які можуть бути виражені простими ASCII, як Backus-Naur-Form для CFL та регулярні вирази для REG?


1
Може бути корисним уточнити значення "добра" в заголовку питання. Що не так у використанні BNF для опису DCFL?
Цуйосі Іто

1
Я маю на увазі, що читати та писати для людей слід легко, тому воно має базуватися на ASCII. BNF чудовий - регулярні вирази - це компактний підмножина BNF. Але який підмножина BNF визначає DCFL, а який визначає VPL?
Якоб

Відповіді:


5

Щодо DCFL, я не бачу кращого позначення, ніж перехідна функція детермінованого автоматичного натискання, тобто явне написання правил форми з станів у , стек символ - послідовність символів в стеці, і символ введення або порожній рядок. Сама позначення не нав'язує детермінізму, але вона легко перевіряється. Використовуючи безтекстовий граматичний тип позначень (як BNF), ви зіткнетеся з проблемами, оскільки DCFL є належним підкласом CFL, і, як зазначає DaniCL, ви не можете взагалі визначити, чи дається CFG, чи є його мова детермінованою.q , q Q z γ aq,z,aq,γq,qQzγa

Що стосується VPLS, в дужках / дужка стилю для CFGs буде досить добре, з правилами виду де є нетерміналом, символ виклику, символ повернення, і альфа в послідовності регулярних виразів над змішаними внутрішніми символами та нетерміналами. Оскільки будь-який VPL також є (D) CFL, ви також можете повторно використовувати вищезазначені позначення для автоматизованих автоматичних викликів і перевірити, чи відповідають операції стеку викликам та поверненням, або записати відношення переходу вкладеного автоматичного слова (що було б менш зайвим) .A a bAaαbAabα

Редагувати: подумайте про це, позначення для XML-схем, як компактний синтаксис RelaxNG ---, який є позначенням ASCII, легко може використовуватися для VPL. Вам просто потрібно застосувати деякі правила іменування тегів, наприклад, тег відкриття "<ab>" для символу виклику, відповідає тегу закриття "</ab>" для символу повернення b .ab


Дякую! Щодо DCFL, я думаю, що це правильний напрямок. Конкретний синтаксис мав би зручні абревіатури для підмножин, які розбираються регулярними виразами. Щодо VPL-файлів, я ще не впевнений, оскільки VLP може мати вивішені символи виклику та повернення на відміну від деревних моделей, таких як XML. Ви можете краще порівняти його з довільною підрядкою SAX-подій з довільного дерева XML. Сумніваюсь, що RelaxNG може це описати.
Якоб

Зауваження Використання ... є детермінованим. знаходиться поруч - це нічого не говорить про те, чи існує підклас CFG, який дуже очевидно описує всі DCFL та більше нічого. Такі, як LR (k) граматики.
reinierpost

@reinerpost: правда, але (на мій захист) я б не вважав граматики LR (1) для надання синтаксичних позначень, тому що потрібно перевірити стан LR (1).
Sylvain

3

Для того, щоб знайти канонічне подання, врахуйте наступне: клас DCFL еквівалентний класу мов, породжених граматиками LR (k), що знову ж таки еквівалентно LR (1). Це означає, що ви можете знайти граматику LR (1) для кожного DCFL. Звичайно, граматика LR (1) все ще залишається контекстною граматикою, але з особливою властивістю: з граматик LR (1) ми можемо легко створити таблиці розбору для керування детермінованим аналізатором (з lookahead 1 символом, отже, LR (1)). Ці таблиці аналізу будуть ще одним поданням, хоча і дещо менш читабельним.

До речі, майте на увазі, що не можна визначити, чи визначена контекстна мова детермінованою (теорема Грейбаха).

Я мушу визнати, що ніколи не чув про VPL.


Що ж, канонічні зображення рідко читаються легко, але дякую за вказівки. Якщо в теоремі Грейбаха зазначено, що в CFL є мови, які не можуть бути вирішені бути в DCFL - як ви вкажете ці мови? Якщо у вас є граматика, ви могли б висловити це у формі Backus Naur (BNF), тож теорема Грейбаха, здається, означає, що немає підмножини BNF, яка б виразно виражала DCFL? Видимо мови виштовхування також відомі як "вкладені слова". Цей клас мов порівняно новий, але актуальний для розбору впорядкованих дерев та подібних структур.
Якоб

Щодо питання невідповідності: мова - це CFL, якщо існує контекстна граматика (CFG), що її породжує. Якщо вам дають CFG, ви можете вирішити, чи є ця граматика LR (k), отже, детермінованою. (Це ж стосується і автоматизованих автоматичних пристроїв - легко перевірити, чи визначений КПК детермінованим чи ні.) Однак, припустимо, у вас є CFG, який не є LR (k) - це не означає, що мова не є DCFL ; ви просто не зможете знайти граматику LR (k) для цього.
DaniCL

"Ви можете вирішити, чи є ця граматика LR (k)" для фіксованого k.
Sylvain

@Jakob: Теорема Грейбаха не стверджує, що, і навіть якби це було, це означало б лише те, що довільні CFG не є підходящими формалізмами для позначення для DCFG, так як вони не є формалізмом належних позначень для звичайних мов (будь то CFG описує, що звичайна мова також не визначається). Однак немає нічого поганого у виборі підкласу CFG (наприклад, звичайні граматики для звичайних мов).
reinierpost

Тут є традиція неохайного формулювання в підручниках: вони, як правило, роблять такі твердження, як "не можна визначити, чи є КФЛ регулярним / детермінованим", коли те, що вони насправді мають на увазі під цим, "не визначимо, чи CFG описує звичайну / детерміновану мова".
reinierpost
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.