- •Назначение специфических ключевых слов и разделителей
- •Назначение специфических ключевых слов и разделителей
- •Назначение специфических ключевых слов и разделителей
- •I.2.4. Лисп
- •Назначение специфических ключевых слов и разделителей
- •I.2.5. Фортран
- •Назначение специфических ключевых слов и разделителей
- •I.3. Идентичность прописных и строчных букв (верхнего и нижнего регистров)
- •I.4. Правила, определяющие идентификатор, букву и цифру
- •I.5. Организация метки
- •I.6. Организация целых чисел
- •I.7. Организация действительных чисел
- •II. Правила, используемые в синтаксическом анализаторе
- •II.1. Организация программы
- •II.2. Описания
- •II.3. Синтаксис операторов
- •II.4. Оператор присваивания
- •II.5. Условный оператор
- •Если в двух последних вариантах используется условное выражение, то 1 означает “истина”, а 0 означает “ложь”.
- •II.6. Оператор цикла
- •Варианты:
- •Варианты тестовых наборов задач
- •Варианты лабораторных работ
II.2. Описания
Первый вариант описания по стилю близок к языку программирования Паскаль, второй напоминает описания Си, а третий ‑ Бейсик.
Варианты:
II.2.1.
$ описание = идентификатор { "," идентификатор } ":" [ vector "[" целое "]" of ] тип.
$ тип = integer | real.
II.2.2.
$ описание = тип идентификатор [ "[" целое "]" ] { "," идентификатор [ "[" целое "]" ] }.
$ тип = integer | real.
II.2.3.
$ описание = dim идентификатор "(" целое ")" { "," идентификатор "(" целое ")" }.
II.3. Синтаксис операторов
Два варианта набора операторов. Различия наблюдаются при описании их синтаксиса. Одинаковым для всех является синтаксис таких операторов, как пустой и перехода. Следует также отметить, что пустой оператор ‑ это отсутствие каких бы то ни было конструкций, а не точка, которая в данном случае является компонентой метаязыка, завершающей правило. Кроме операторов здесь же приведен еще ряд конструкций языка, являющихся общими для всех вариантов.
Варианты:
II.3.1.
$ оператор = [метка] непомеченный.
$ непомеченный = составной | присваивания | перехода
условный | цикла | пустой | ввода | вывода.
$ пустой = .
$ перехода = goto имя_метки.
$ ввода = read переменная { "," переменная }.
$ вывода = write ( выражение | спецификатор )
{ "," ( выражение | спецификатор ) }.
$ переменная = идентификатор [ "[" индекс "]" ].
$ индекс = идентификатор | целое.
$ спецификатор = skip | space | tab.
II.3.2.
$ оператор = метка непомеченный.
$ непомеченный = присваивания | перехода
условный | цикла | пустой | ввода | вывода.
$ пустой = .
$ перехода = goto имя_метки.
$ ввода = input переменная { "," переменная }.
$ вывода = print ( выражение | спецификатор )
{ "," ( выражение | спецификатор ) }.
$ переменная = идентификатор [ "(" индекс ")" ].
$ индекс = идентификатор | целое.
$ спецификатор = skip | space | tab.
II.4. Оператор присваивания
Определяется вместе с выражением, которое ему присваивается, что обеспечивает согласованное восприятие языковых конструкций. Выражение может использоваться и в других операторах языка, например в операторе вывода. Существует три альтернативы для оператора присваивания и выражений: инфиксная форма, постфиксная скобочная форма и польская префиксная форма.
Варианты:
II.4.1. Инфиксная форма.
$ присваивание = переменная ASG выражение.
$ выражение = слагаемое { (EQ | NE | LT | GT | LE | GE) слагаемое }.
$ слагаемое = множитель { (ADD | MIN) множитель }.
$ множитель = унарное { (MUL | DIV | MOD) унарное }.
$ унарное = [ MIN ] терм.
$ терм = переменная | число | "(" выражение")".
$ число = целое | действительное.
II.4.2. Префиксная форма
$ присваивание = ASG переменная "," выражение.
$ выражение = простое_выражение | операнд.
$ простое_выражение = операция выражение выражение | "( " MIN выражение ")".
$ операнд = переменная | целое | действительное.
$ операция = MUL | DIV | MOD | ADD |MIN | EQ | NE | LT | GT | LE | GE.
II.4.3. Постфиксная форма
$ присваивание = выражение переменная ASG .
$ выражение = простое_выражение | операнд.
$ простое_выражение = "(" выражение выражение операция ")" | "(" выражение MIN ")".
$ операнд = переменная | целое | действительное.
$ операция = MUL | DIV | MOD | ADD | MIN | EQ | NE | LT | GT | LE | GE.