IPB
ЛогинПароль:

 
 Ответить  Открыть новую тему 
> синтаксический анализ оператора Паскаль
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Женский
Реальное имя: Даша

Репутация: -  0  +


Произвести синтаксический анализ оператора языка Паскаль WRITELN(согласно условию,оператор может иметь произвольное число пробелов между символами).Записать автоматную грамматику оператора:задать её характеристики, представить дерево синтаксического анализа. По ней построить КА,который будет выполнять роль синтаксического анализатора оператора:начертить его граф-схему и построить таблицу переходов.

Плиз,help!!!


--------------------
<...>
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 618
Пол: Мужской

Репутация: -  24  +


Так тебе надо сделать синтаксический анализ оператора в полной его форме (со списком аргументов и так далее)? Или просто разбор лексемы "WRITELN"? А то я что-то путаюсь. С одной стороны на автоматных грамматиках реализуется обычно именно лексический анализ, с другой у тебя явно написано слово "синтаксический" =) Если это слово написано не по ошибке, то странно, что на вход дается стока: обычно, синтаксический анализ проводится после лексического и имеет дело с лексемами, а не с отдельными терминальными символами.


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Женский
Реальное имя: Даша

Репутация: -  0  +


Цитата(Archon @ 3.11.2008 18:51) *

Так тебе надо сделать синтаксический анализ оператора в полной его форме (со списком аргументов и так далее)? Или просто разбор лексемы "WRITELN"? А то я что-то путаюсь. С одной стороны на автоматных грамматиках реализуется обычно именно лексический анализ, с другой у тебя явно написано слово "синтаксический" =) Если это слово написано не по ошибке, то странно, что на вход дается стока: обычно, синтаксический анализ проводится после лексического и имеет дело с лексемами, а не с отдельными терминальными символами.

я сама не знаю,поэтому и обращаюсь,я не могу понять,что такое синтаксический анализ,и как его сделать согласно моему условию задачи


--------------------
<...>
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Профи
****

Группа: Пользователи
Сообщений: 618
Пол: Мужской

Репутация: -  24  +


Синтаксический анализ - разбор выражения. Обычно синтаксический анализ делится на два уровня:
* Лексический анализ — входной поток символов разбивается на линейную последовательность лексем - «слов» языка (напр. целые числа, идентификаторы, строковые константы и т. д.). Реализуется на автоматных грамматиках (регулярных выражениях). Одно из популярных средств для создания лексических анализаторов - LEX.
* Грамматический анализ — из лексем выделяются «предложения» языка, согласно грамматическим правилам, и создаётся дерево разбора. Для этого используются контекстно-свободные грамматики: s-грамматики, q-грамматики, ll(x)-грамматики (автоматы с магазинной памятью)... Популярное средство создания синтаксических анализаторов - YACC.
Это то что я об этом знаю =) Может встретишь знакомые слова? Тогда можно будет определить, что тебе нужно.

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


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Женский
Реальное имя: Даша

Репутация: -  0  +


я так думаю,что для общего


--------------------
<...>
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Профи
****

Группа: Пользователи
Сообщений: 618
Пол: Мужской

Репутация: -  24  +


Все таки сложно поверить, что полную версию записи оператора WriteLn требуется представить в виде автоматной грамматики. Это возможно, но сложно. Рекомендую перепроверить задание и посмотреть примеры выполнения, которые вы наверняка разбирали на лекциях.

Вот я попытался набросать автоматную грамматику упрощённого оператора WriteLn с поддержкой вывода строковых констант и целых числовых в десятичной форме. Без модификаторов вывода вроде "WriteLn(15:3);". Без арифметических выражений. Для удобства восприятия я исключил из терминальных символов заглавные буквы и использовал их для обозначения нетерминальных символов. Комментарии указаны в С++ стиле (//).

Код
S->writeln(A
A->);
A->'B    // начало строки
B->aB
B->bB
B->cB
...      // Перечисляем все буквы
B->zB
B->!B    // Пошли символы
B->''B   // Одинарная кавычка только в экранированном варианте (2 раза подряд)
...      // Все остальные символы
B->',C   // Конец строки с пробелами после запятой
B->',E   // Без пробелов
C->_C    // Под подчёркиванием я имел ввиду пробел
C->_E
A->0D    // Начало числа
A->1D
...      // Все остальные цифры
A->9D
A->-D    // Для отрицательного числа
A->+D    // Можно указывать и +
D->0D
D->1D
...      // Все остальные цифры
D->9D
D->,C    // Конец числа с пробелами
D->,E    // Конец числа без пробелов после запятой
E->'B    // E аналогично A, но не может заканчивать оператор (нет правила E->);)
E->0D
E->1D
...
E->9D
E->-D
E->+D
Надеюсь я нигде не ошибся.

Сильно упрощённый вариант записи оператора и уже такие сложности в грамматике... Устраивает такой вариант?


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Женский
Реальное имя: Даша

Репутация: -  0  +


мож скинуть ещё материальчика по этой теме,если таковой в наличии имеется


--------------------
<...>
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Профи
****

Группа: Пользователи
Сообщений: 618
Пол: Мужской

Репутация: -  24  +


Честно говоря только мой конспект и Википедия. Ищи по запросу "формальная грамматика" или "синтаксический анализ"


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Женский
Реальное имя: Даша

Репутация: -  0  +


а мож скинуть конспект?? angel.gif blush.gif


--------------------
<...>
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Профи
****

Группа: Пользователи
Сообщений: 618
Пол: Мужской

Репутация: -  24  +


Только если бандеролью, но мне он нужен =)


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Женский
Реальное имя: Даша

Репутация: -  0  +


а по почте никак?


--------------------
<...>
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Профи
****

Группа: Пользователи
Сообщений: 618
Пол: Мужской

Репутация: -  24  +


Конспекты я пишу в тетрадях и они мне нужны. Да и немного там по этой теме полезного. Для тебя это не выход. Если возникнут конкретные вопросы - задавай сюда я постараюсь ответить. И не ленись пользоваться поиском. Google по запросу "методы трансляции" выдал интересные ссылки на первой же странице. В том числе и конспекты лекций.


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Женский
Реальное имя: Даша

Репутация: -  0  +


а отсканить и по e-mail отправить?


--------------------
<...>
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Женский
Реальное имя: Даша

Репутация: -  0  +


только,единственный вопрос,числа предусмотрены,а переменные?


--------------------
<...>
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Женский
Реальное имя: Даша

Репутация: -  0  +


вот моё решение
Код
S->writelnB
B->(C
C->пробелC
C->'D
D->любой_симв._кроме_апострофаD
D->''D
D->'E
E->пробелE
E->,C
C->лат.букваJ
C->_J
J->лат.букваJ
J->_J
J->цифраJ
J->,C
J->пробелK
K->пробелK
K->,C
J->)T
K->)T
T->пробелT
T->;U


Сообщение отредактировано: Дашустрик -


--------------------
<...>
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Профи
****

Группа: Пользователи
Сообщений: 618
Пол: Мужской

Репутация: -  24  +


Цитата
только,единственный вопрос,числа предусмотрены,а переменные?
У меня только числа и строки, переменные - нет.

В твоем варианте все на первый взгляд нормально, только есть пара замечаний:
1. Поддерживаются только строки и переменные, а простые числа - нет
2. Не поддерживаются следующие варианты записи оператора WriteLn (а по логике должны бы):
  • writeln();
  • writeln('text');
  • writeln(my_var, 'text');
То есть после текста не может идти закрывающей скобки и нет варианта пустой записи оператора

Сообщение отредактировано: Archon -


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 18:39
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name