Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на языке Pascal


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

lamed
Статус: Практикант
Рейтинг: 2151
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 1796
∙ повысить рейтинг »
_Ayl_
Статус: Студент
Рейтинг: 1627
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Программирование / Pascal (Паскаль)

Номер выпуска:1033
Дата выхода:20.02.2010, 20:00
Администратор рассылки:Калашников О.А., Руководитель
Подписчиков / экспертов:332 / 198
Вопросов / ответов:1 / 1

Вопрос № 176703: Извините, если не там задаю вопрос. Помогите написать грамматику(у меня есть решенная, но я не уверен, что правильно). Задание: Задайте синтаксис описания функции в языке PASCAL. В теле функции можно использовать только операторы присваивания, пра...



Вопрос № 176703:

Извините, если не там задаю вопрос. Помогите написать грамматику(у меня есть решенная, но я не уверен, что правильно).
Задание: Задайте синтаксис описания функции в языке PASCAL. В теле функции можно использовать только операторы присваивания, правой частью которых являются арифметические выражения, составленные из простых переменных и констант целого типа, круглых скобок и знаков арифметических операций +,-,*,/
Приоритет операций обычный.
Построенная мной грамматика:
1)<I>='function' <B>(<Z>:<C>):<C>
2)<Z> -> <B>,<Z>|<R>
3)<D> -> a..z
4)<B> -> <D><B>|<D>
5)<C> -> 'int'|'real'
6)'var' <Z>:<C>
7)'begin'
8)<L>:=<P>
9)<D>=a|b|c|0..9
10)<O>=+|-|*|/
11)<L>=<P>
12)<R>=<P><O><P>
13)<R>=(<P><O><P>)< br>14)<R>=<R><O><R>
15)'end'
проверьте пожалуйста, правильно ли и если можно пример приведите, выполнения грамматики.

Отправлен: 15.02.2010, 19:34
Вопрос задал: Azarov88, Посетитель
Всего ответов: 1
Страница вопроса »


Отвечает Зенченко Константин Николаевич, Модератор :
Здравствуйте, Azarov88.

Структура синтаксиса функции практически полностью повторяет структуру программы, за исключение нескольких разделов.
Синтаксис определен с помощью Расширенной Формы Бэкуса-Наура:
Синтаксические конструкции в фигурных скобках повторяются ноль и более раз. Необязательные элементы находятся в квадратных скобках.

<функция>::=<заголовок функции>[<разделы функции>]<тело функции>
<заголовок функции>::= function <идентификатор функции> [ <переменные функции> ] : <тип> ;
<идентификатор функции>::=<буква> { <буква> | <цифра> }
< буква>::='A' .. 'Z' , 'a' .. 'z'
<цифра>::=0 .. 9
<переменные функции>::= ( <переменная типа> { <переменная типа> } )
<переменная типа>::=<идентификатор переменной>:<тип> ; | <идентификатор переменной>, <переменная типа>
<идентификатор переменной>::=<буква> { <буква> | <цифра> }
<тип>::= integer | real
<разделы функции>::= { <раздел меток> | <раздел констант> | <раздел типов> | <раздел переменных> | <раздел описания внутренних функций> | <раздел описания внутренних процедур> }

Из разделов определяем только константы и переменные:
< ;раздел констант>::=const <константа> { <константа>}
<константа>::= <идентификатор константы> = <цифра> { <цифра> }; | <цифра> { <цифра> } . <цифра> { <цифра> } ;
<идентификатор константы>::=<буква> { <буква> | <цифра> }
<раздел переменных>::= var <переменная типа> { <переменная типа> }

<тело функции>::=begin <оператор>; { <оператор>; }end;
<оператор>::= Присваивание (:=) | Begin..End | Case..Of..Else..End | For..To/Downto..Do |
Goto | If..Then..Else | InLine(...) | Вызов процедуры | Repeat..Until | While..Do | With..Do

Из операторов определяем только присваивание:
<левая часть> := <выражение>
<выражение> ::= <операнд> { <операция суммирования> <операнд> }
<операнд>::= <множитель> { <операция умножения> <множитель> }
<множитель>::= <идетификатор константы> | <идентификатор переменной> | ( <выражение>)
<операция умножения>::= * | /
<операция суммирования>::= + | -

Удачи!
-----
Итерация от человека. Рекурсия — от Бога. — Л. Питер Дойч

Ответ отправил: Зенченко Константин Николаевич, Модератор
Ответ отправлен: 17.02.2010, 19:20
Номер ответа: 259520
Украина, Киев
Тел.: +38-097-953-66-19
Адрес: Украина, Киев

Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 259520 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2010, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2010.6.14 от 03.02.2010

    В избранное