Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Ньюансы создания строки по правилам граматики / 4 сообщений из 4, страница 1 из 1
05.04.2015, 14:56
    #38927410
arrt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ньюансы создания строки по правилам граматики
Мне надо создать строку которая порождается следующими правилами грамматики:
P={ включается следующие 6 правил.
S->IO ; O->:=D; D->(D|(А|)Z|) ; A->aZ|bZ|cD|bD|ID ; Z->+A|<A|andD|>A; I->x.
Не беря во внимание разницу между терминальными и нетерминальными (малими и большими)символами, понятно что начинаем c S. I заменяем на x. Остается О.
Но как быть с символом присваивания непонятно. Значит ли то что такая запись то самое что если бы его не было то есть О-> D. Вот третье правило уже вызывает затруднение. -- Я так понимаю что начинать надо с(А|)которое значит что это или А или ничего?? А потом уже выбирать между D (А|) Z и "ничего". Один з двух главных вопросов -- как это OR правило здесь применять. Как и 4 ом правиле где повторяются уже прежние символы I,D? Надо выбирать какой то один вариант? Или перебирать все варианты.
В пятом правиле вообще все сложно -- перечитав несколько пособий и разделов по граматики не видел таких примеров. Что это за +А, <А, >А, andD -- как их воспринимать? То есть здесь два вопроса главных: как использовать эти OR операторы при выведение строки, и что значат операторы плюс, больше меньше, "И" в предпоследнем правиле. Хотя есть еще два менее важных вопроса- -что значит оператор присваевание и должна ли быть такая строка одна?
...
Рейтинг: 0 / 0
05.04.2015, 18:07
    #38927453
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ньюансы создания строки по правилам граматики
Во первых, учись форматировать сообщения.
Код: plaintext
1.
2.
3.
4.
5.
6.
P=
 S->IO ; 
 O->:=D;
 D->(D|(А|)Z|) ;
 A->aZ|bZ|cD|bD|ID ;
 Z->+A|<A|andD|>A;
 I->x.
Так читать удобнее и нагляднее.

Во вторых, в CFG есть только терминаторы и правила. Из служебных символов есть только: -> после имени правила которое мы определяем и | для обозначения ИЛИ. Все остальное терминалы и правила. Отсюда, O->:=D значит что правило O это терминал ":=" и D после него. Аналогично и с +A, <A, и тд это "терминатор и правило".

Еще вопросы?
...
Рейтинг: 0 / 0
05.04.2015, 22:15
    #38927568
arrt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ньюансы создания строки по правилам граматики
White Owl,
У меня после P= стоит фигурная скобка.
Так что такое выражение значит O->:=D или такое >A.
И как применять эти операторы ИЛИ (или особенно такие --(А|) )--надо все варианты перебирать или какой то один?
Уже до десятка материалов прочитал такого не встречал
...
Рейтинг: 0 / 0
08.04.2015, 05:40
    #38929961
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ньюансы создания строки по правилам граматики
arrtУ меня после P= стоит фигурная скобка.Это не важно.

arrtТак что такое выражение значит O->:=D или такое >A.терминал и правило.
Правило О формируется из строки ":=" и того что вернуло правило D.

arrtИ как применять эти операторы ИЛИ (или особенно такие --(А|) )--надо все варианты перебирать или какой то один?Да, все варианты и ни один из них...
Ты в неправильном направлении все это читаешь. Надо не строку формировать на основе CFG, а отвечать на вопрос: подчиняется ли данная строка этому CFG?
Берешь строку и пытаешься построить дерево в котором нодами будут правила CFG, а листями терминалы. И все эти терминалы должны в сумме быть строкой.

arrtУже до десятка материалов прочитал такого не встречалПлохо искал. В вики оно все хорошо описано:
http://en.wikipedia.org/wiki/Context-free_grammar
Посмотри пример под заголовком algebraic expression.
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Ньюансы создания строки по правилам граматики / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]