Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.06.2012, 20:54   #51
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
быть логическое выражение или переменная
Собственно переменную можно рассматривать как логическое выражение...
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 13.06.2012, 21:31   #52
Arturko
Пользователь
 
Регистрация: 09.02.2009
Сообщений: 35
По умолчанию

Вообщем надо сначала составить правила, а уже потом писать код.
Вот что у меня получилось для моего куска кода.
Код:
if (CEdit1.Text='') and (KEdit2.Text='') then begin ShowMessage('Please enter data'); exit end;
if (<выражение>) and (<выражение>) then begin <инструкция>; exit end;
<выражение>::=<идентификатор> = '<?>'
<инструкция>::=<идентификатор>('<?> ')

Исходя из моих правил:
в выражении слева от знака равно может быть любое введённое слово - идентификатор, что справа от равно, надо ещё разобраться.
в инструкции тоже любой идентификатор а вот что в скобках, тоже надо разобраться.

Помоему теперь понятно когда нужно выводить ошибки, а когда нет.

Ну как? В чём ошибки? Знаки вопроса - как обозвать то, что будет вводиться в ковычках?

Последний раз редактировалось Arturko; 13.06.2012 в 21:34.
Arturko вне форума Ответить с цитированием
Старый 13.06.2012, 21:36   #53
Arturko
Пользователь
 
Регистрация: 09.02.2009
Сообщений: 35
По умолчанию

Дальнейшие мысли: забить все ключевые слова в массив, а дальше проверять, например если после ключевого слова if нет скобки - выводим ( expected, если после ключевой скобки нет выражения - выводим statement expected и т.д.

Но это потом, сейчас главное правильно составить правила.
Arturko вне форума Ответить с цитированием
Старый 13.06.2012, 21:38   #54
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Вы еще забыли короткую форму условия.

Цитата:
(<выражение>) and (<выражение>)
Это какая-то бяка. Условие описывают обычно так:
if условие then действие
А вот условие уже должно включать и and и or и пр. Разбор условий поможет и для других операторов - например, while.

Цитата:
например если после ключевого слова if нет скобки - выводим ( expected, если после ключевой скобки нет выражения - выводим statement expected и т.д.
А как насчет:
Код:
if FileExists(FileName) then result=0;
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 13.06.2012, 21:43   #55
Arturko
Пользователь
 
Регистрация: 09.02.2009
Сообщений: 35
По умолчанию

Правила пишем для конкретного кода, поэтому думаю тут без and нельзя, а если есть and, то после if будет скобка.
Arturko вне форума Ответить с цитированием
Старый 13.06.2012, 21:47   #56
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Правила пишем для конкретного кода, поэтому думаю тут без and нельзя, а если есть and, то после if будет скобка.
Вы явно противоречите правилам языка. Думаю стоит все-таки прояснить ситуацию. А если там будет несколько and? Препод ведь не зря про рекурсию писал... А вложенные скобки в рекурсии милое дело.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 13.06.2012, 21:52   #57
Arturko
Пользователь
 
Регистрация: 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.
Arturko вне форума Ответить с цитированием
Старый 14.06.2012, 07:18   #58
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Arturko Посмотреть сообщение
Вообщем надо сначала составить правила, а уже потом писать код.
Сначала нужно четко сформулировать условия задачи, а только потом приниматься за решение.
Пока условия никому не понятны (что видно из обсуждения).
s-andriano вне форума Ответить с цитированием
Старый 14.06.2012, 08:41   #59
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сначала нужно четко сформулировать условия задачи, а только потом приниматься за решение.
Пока условия никому не понятны (что видно из обсуждения).
да нет. мне лично ТЕПЕРЬ условия задачи понятны.
пост выше #57 более-менее внятный. и теперь понятны правила, по которым должна проверяться введённая конструкция.

Осталось вспомнить/найти/изучить/разобрать метод рекурсивного спуска и написать его реализацию, и всё, задача решена
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.06.2012, 10:46   #60
Arturko
Пользователь
 
Регистрация: 09.02.2009
Сообщений: 35
По умолчанию

В этом и проблема. Можете помочь с рекурсивным спуском?
Arturko вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
синтаксический анализатор(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