![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#51 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
![]() Цитата:
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика ![]() |
|
![]() |
![]() |
![]() |
#52 |
Пользователь
Регистрация: 09.02.2009
Сообщений: 35
|
![]()
Вообщем надо сначала составить правила, а уже потом писать код.
Вот что у меня получилось для моего куска кода. Код:
<выражение>::=<идентификатор> = '<?>' <инструкция>::=<идентификатор>('<?> ') Исходя из моих правил: в выражении слева от знака равно может быть любое введённое слово - идентификатор, что справа от равно, надо ещё разобраться. в инструкции тоже любой идентификатор а вот что в скобках, тоже надо разобраться. Помоему теперь понятно когда нужно выводить ошибки, а когда нет. Ну как? В чём ошибки? Знаки вопроса - как обозвать то, что будет вводиться в ковычках? Последний раз редактировалось Arturko; 13.06.2012 в 21:34. |
![]() |
![]() |
![]() |
#53 |
Пользователь
Регистрация: 09.02.2009
Сообщений: 35
|
![]()
Дальнейшие мысли: забить все ключевые слова в массив, а дальше проверять, например если после ключевого слова if нет скобки - выводим ( expected, если после ключевой скобки нет выражения - выводим statement expected и т.д.
Но это потом, сейчас главное правильно составить правила. |
![]() |
![]() |
![]() |
#54 | ||
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
![]()
Вы еще забыли короткую форму условия.
Цитата:
if условие then действие А вот условие уже должно включать и and и or и пр. Разбор условий поможет и для других операторов - например, while. Цитата:
Код:
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика ![]() |
||
![]() |
![]() |
![]() |
#55 |
Пользователь
Регистрация: 09.02.2009
Сообщений: 35
|
![]()
Правила пишем для конкретного кода, поэтому думаю тут без and нельзя, а если есть and, то после if будет скобка.
|
![]() |
![]() |
![]() |
#56 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
![]() Цитата:
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика ![]() |
|
![]() |
![]() |
![]() |
#57 |
Пользователь
Регистрация: 09.02.2009
Сообщений: 35
|
![]()
<Условие>::<идентификатор>=<идентиф икатор> |<идентификатор>=<число> |<число>=<идентификатор> |<идентификатор>=<идентификатор> AND <идентификатор>=<идентификатор>
вы так предлагаете? я же не смогу так описать все правила, дальше мне надо сделать | ... and .... and..... | потом с тремя and, с четырьмя.... бескончено. Отправил преподу, задал вопрос должно быть именно два условия и один and, или надо описать все возможные варианты if. Кстати в этом примере begin и end тогда тоже не обязательны. Я всё узнал. Считаем что должно быть обязательно 2 условия, обязательно begin, exit, end. В условии должен быть именно такой литерал, какой описан в правиле, т.е никаких цифр. Идентфиикатор обязательно такого типа, что бы была точка (т.е. текстовое поле), а не просто любой идентификатор. Вот так будут выглядеть правила: if (<выражение>) and (<выражение>) then begin <инструкция>; exit end; <выражение>::=<идентификатор>.<иден тификатор>= <литерал> <инструкция>::=<идентификатор>(<лит ерал>) <литерал>::= ''|'Please enter data' Теперь, когда известны правила (они именно такие, одобрены преподавателем), мы знаем что будет являться ошибкой, а что нет. Помогите пожалуйста с кодом, с чего начать? Какие лексемы заносить в массив, как сравнивать, и главное, как тут использовать рекурсию? Идею хотя бы, буду пробовать сам. ---- форум - не чат - есть что добавить к вашему крайнему сообщению - нажимайте на нём кнопку "Правка" и редактируйте/дописывайте... Модератор Последний раз редактировалось Serge_Bliznykov; 14.06.2012 в 08:36. |
![]() |
![]() |
![]() |
#58 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
![]() |
![]() |
![]() |
![]() |
#59 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]() Цитата:
пост выше #57 более-менее внятный. и теперь понятны правила, по которым должна проверяться введённая конструкция. Осталось вспомнить/найти/изучить/разобрать метод рекурсивного спуска и написать его реализацию, и всё, задача решена ![]() |
|
![]() |
![]() |
![]() |
#60 |
Пользователь
Регистрация: 09.02.2009
Сообщений: 35
|
![]()
В этом и проблема. Можете помочь с рекурсивным спуском?
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
синтаксический анализатор(LL) | Legato | Общие вопросы Delphi | 2 | 25.12.2011 18:29 |
Синтаксический анализатор | Lisёноk | Помощь студентам | 2 | 12.12.2011 09:51 |
Синтаксический анализатор | Jeka57 | Помощь студентам | 1 | 05.06.2011 22:47 |
Синтаксический анализатор | Ita | Фриланс | 0 | 29.03.2011 01:37 |
Синтаксический анализатор | Douglas | Помощь студентам | 0 | 28.12.2010 18:01 |