2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


В этом разделе нельзя создавать новые темы.

Если Вы хотите задать новый вопрос, то не дописывайте его в существующую тему, а создайте новую в корневом разделе "Помогите решить/разобраться (М)".

Если Вы зададите новый вопрос в существующей теме, то в случае нарушения оформления или других правил форума Ваше сообщение и все ответы на него могут быть удалены без предупреждения.

Не ищите на этом форуме халяву, правила запрещают участникам публиковать готовые решения стандартных учебных задач. Автор вопроса обязан привести свои попытки решения и указать конкретные затруднения.

Обязательно просмотрите тему Правила данного раздела, иначе Ваша тема может быть удалена или перемещена в Карантин, а Вы так и не узнаете, почему.



Начать новую тему Ответить на тему
 
 Приведение КС-грамматики.
Сообщение11.02.2015, 15:35 


22/07/12
560
Есть вот такая грамматика:
$E \to (E)E \; | \; \{E\}E \; | \;\varnothing$
Насколько я знаю, есть теорема, что любая КС-грамматика пожет быть приведена к эквивалентной КС-грамматике не содержащей правил, порождающих пустую цепочку. Но я никак не могу разобраться в алгоритме приведения. Просьба объяснить на этом пример, как это делается.

 Профиль  
                  
 
 Re: Приведение КС-грамматики.
Сообщение11.02.2015, 15:44 
Заслуженный участник


16/02/13
4111
Владивосток
Насколько я помню, просто подставляем эту пустую цепочку, да и всё.
$E \to (E)E \; | \; \{E\}E \; | \;()E \; | \;(E) \; | \;() \; | \; \{\}E \; | \; \{E\} \; | \; \{\}$

 Профиль  
                  
 
 Re: Приведение КС-грамматики.
Сообщение11.02.2015, 16:06 


22/07/12
560
iifat в сообщении #976807 писал(а):
Насколько я помню, просто подставляем эту пустую цепочку, да и всё.
$E \to (E)E \; | \; \{E\}E \; | \;()E \; | \;(E) \; | \;() \; | \; \{\}E \; | \; \{E\} \; | \; \{\}$

Я немного не так грамматику составил, надо было вот так:
$E \to (E) \; | \; \{E\} \; | \; EE \; | \; \varnothing$
Итак, подставляю и получается:
$E \to (E) \; | \; \{E\} \; | \; () \; | \;  \{\} \; | \;  EE$
Так, остаётся избавиться от левой рекурсии.

 Профиль  
                  
 
 Re: Приведение КС-грамматики.
Сообщение11.02.2015, 16:16 
Заслуженный участник


16/02/13
4111
Владивосток
Хм. А вот это уже на редкость неоднозначная грамматика. $E \to EE \; | \; \varnothing$ даёт бесконечное число деревьев вывода пустой строки (да и любой другой).
Вообще, я, кажется, несколько подзабыл, либо полностью избавиться таки не удастся, либо не полное избавление от правил достигается. Если приведённые правила — это вся грамматика, то уж хоть одно $E\to\varnothing$ останется, поскольку иначе пустой строки не получить. Напомните название алгоритма либо дайте ссылку, пожалуйста. Гляну поконкретнее.

 Профиль  
                  
 
 Re: Приведение КС-грамматики
Сообщение11.02.2015, 16:20 


22/07/12
560
iifat в сообщении #976828 писал(а):
Хм. А вот это уже на редкость неоднозначная грамматика. $E \to EE \; | \; \varnothing$ даёт бесконечное число деревьев вывода пустой строки (да и любой другой).
Вообще, я, кажется, несколько подзабыл, либо полностью избавиться таки не удастся, либо не полное избавление от правил достигается. Если приведённые правила — это вся грамматика, то уж хоть одно $E\to\varnothing$ останется, поскольку иначе пустой строки не получить. Напомните название алгоритма либо дайте ссылку, пожалуйста. Гляну поконкретнее.

http://mathhelpplanet.com/static.php?p=privedennaya-forma-ks-grammatiki

-- 11.02.2015, 16:27 --

Кажется разобрался:
$E \to (E) \; | \; \{E\} \; | \; () \; | \; \{\} \; | \; EE$
Эту грамматику мы заменяем этой:
$E \to (E) \; | \; \{E\} \; | \; () \; | \; \{\}$
$E \to (E)D \; | \; \{E\}D \; | \; ()D \; | \; \{\}D \;$
$D \to ED \; | \; E$

Или я что-то напутал?

 Профиль  
                  
 
 Re: Приведение КС-грамматики.
Сообщение11.02.2015, 16:33 
Заслуженный участник


16/02/13
4111
Владивосток
Точно, одно правило таки остаётся.
main.c в сообщении #976821 писал(а):
остаётся избавиться от левой рекурсии
Опять же, подстановка, помнится.
$E \to (E) \; | \; \{E\} \; | \; () \; | \;  \{\} \; | \;  (E)E \; | \; \{E\}E \; | \; ()E \; | \;  \{\}E$

-- 12.02.2015, 00:40 --

main.c в сообщении #976830 писал(а):
Или я что-то напутал?
По-моему, да. ()()(), например, в исходной не выводится, в отличие от. Ну и, напоминаю, одно правило $E\to\varnothing$ остаётся. Например, в форме $S\to\;E|\varnothing$ плюс правило $E\to\dots$

 Профиль  
                  
 
 Re: Приведение КС-грамматики.
Сообщение11.02.2015, 17:43 


22/07/12
560
Может я бьюсь головой об стенку? :? Для правильного скобочного выражения можно построить LL(1)-грамматику или нет?

 Профиль  
                  
 
 Re: Приведение КС-грамматики.
Сообщение11.02.2015, 17:47 
Заслуженный участник


16/02/13
4111
Владивосток
Разумеется. Вы хотите скобочное с двумя видами скобок? А кроме скобок чего-нить будет?

 Профиль  
                  
 
 Re: Приведение КС-грамматики.
Сообщение11.02.2015, 18:08 


22/07/12
560
iifat в сообщении #976874 писал(а):
Разумеется. Вы хотите скобочное с двумя видами скобок? А кроме скобок чего-нить будет?

Я ходил вокруг да около)) Вот же она:
$E \to (E)E \; | \; \{E\}E \; | \; \varnothing$
На пустой терминальный символ переходим во всех оставшихся случаях. Я парсить программой собираюсь и меня почему-то переклинило, что грамматика не должна порождать пустую цепочку. Ну разве что только в начале. Ну ладно, зато немного освежил в памяти теорию формальных языков. :D Спасибо.

 Профиль  
                  
 
 Re: Приведение КС-грамматики.
Сообщение12.02.2015, 03:39 
Заслуженный участник


16/02/13
4111
Владивосток
Подозреваю, не совсем ещё.
ll(1) — это для нисходящего метода. То бишь, есть нетерминал в частично разобранной строке, есть начало соответствующей подстроки и по первому символу должно однозначно определяться правило, по которому его раскрывать. То бишь, вот такое
$E\to()|(E)$
надо преобразовывать. Например, вот так:
$E\to(F$
$F\to)\;|\;E)$

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group