Скачиваний:
10
Добавлен:
01.05.2014
Размер:
1.03 Mб
Скачать

Санкт-Петербургский Государственный

Электротехнический Университет им. В.И. Ленина («ЛЭТИ»)

Кафедра МО ЭВМ

Дисциплина: РЯП

Пояснительная записка

к курсовой работе

вариант 4

Cтуденты:

Соколов И.С., гр. 3305

Баранова Н.Н., гр. 3305

Преподаватель:

Самойленко В.П.

Санкт-Петербург

2008

Задание на курсовую работу

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

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

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

Язык должен допускать использование логических выражений, в состав которых могут входить отношения, круглые скобки и знаки логических операций: И, ИЛИ, НЕ и, в случае наличия в языке логического типа, константы и переменные этого типа. Приоритет операций обычный.

Операции над переменными структурированного типа определяются вариантом задания.

Состав операторов языка:

  • оператор присваивания;

  • оператор ввода;

  • оператор вывода;

  • составной оператор;

  • оператор безусловного перехода;

  • условный оператор, условие в котором задается логическим выражением;

  • оператор цикла, условие в котором задается логическим выражением.

Конкретный вид операторов определяется вариантом задания.

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

Задание 4

Базовый язык – Паскаль.

Базовые типы: целый, рациональный, ограниченный, перечислимый.

Структурированный тип: массив.

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

Оператор цикла – с параметром.

Перегрузка операций – разрешается.

Эквивалентность типов – именная.

Класс грамматик – LL(1)-грамматики.

Промежуточный язык – польская инверсная запись.

1. Описание входного языка.

1.1. Синтаксис входного языка.

<программа>::=[program <имя>;][<раздел описаний>]<раздел операторов>

<раздел описаний>::={<раздел описания меток>

|<раздел описания констант>

|<раздел описания типов>|<раздел описания переменных>}

<раздел описания меток>::=label <метка>{,<метка>};

<метка>::=<имя>|беззнаковое целое

<раздел описания констант>::=const <объявление константы>;

{<объявление константы>;}

<объявление константы>::=<имя>= беззнаковое целое

<раздел описания типов>::=type <объявление типа;>{ <объявление типа;>}

<объявление типа>::=<имя>=<тип>

<тип>::=<встроенный тип>|<массив>|<перечислимый тип>|<ограниченный тип>|<имя>

<встроенный тип>::=integer|rational

<массив>::=array[<тип индекса>{,<тип индекса>}] of <тип>

<тип индекса>::=<перечислимый тип>|<ограниченный тип>|<имя>

<перечислимый тип>::=(<список имен>)

<ограниченный тип>::=<константное выражение>..<константное выражение>

<константное выражение>::=<имя>| беззнаковое целое

<раздел описания переменных>::=var <список имен>:<тип>;

{<список имен>:<тип>;}

<список имен>::=<имя>{,<имя>}

<выражение>::=<слагаемое>{<аддитивная операция><слагаемое>}

<слагаемое>::=<множитель>{<мультипликативная операция><множитель>}

<множитель>::=([<унарный оператор>]<множитель>)|<переменная>

|беззнаковое целое|(<выражение>)

<аддитивная операция>::= + | -

<мультипликативная операция>::= * | / | common

<унарный оператор>::= frac | int | + | - | simplify | irregular

<переменная>::=<имя>[[<выражение>{,<выражение>}]][.numerator|.denominator]

<имя>::=идентификатор

<логическое выражение>::=<конъюнкция>{or <конъюнкция>}|<отношение>

<конъюнкция>::=<логический множитель>{and <логический множитель>}

<логический множитель>::=(<логическое выражение>)|(<отношение>)

|not <логический множитель>

<отношение>::=<выражение><операция отношения><выражение>

<операция отношения>::= <|<=|>=|<>|>|=

<раздел операторов>::=<составной оператор>.

<составной оператор>::= begin <оператор>{;<оператор>} end

<оператор>::=[<метка>:]<непомеченный оператор>

<непомеченный оператор>::=<оператор цикла с параметром>

|<оператор присваивания>|<пустой оператор>|<составной оператор>

|<условный оператор> |<оператор ввода>|<оператор вывода>

|<оператор безусловного перехода>

<оператор цикла с параметром>::= for <имя>:=<выражение> <направление изменения переменной цикла> <выражение> do <оператор>

<направление изменения переменной цикла>::= to | downto

<оператор присваивания>::=<переменная> := <выражение>

<пустой оператор>::=

<оператор безусловного перехода>::=goto <метка>

<условный оператор>::=if< логическое выражение>then<оператор>[else<оператор>]

<оператор ввода>::=read(<переменная>{,<переменная>})

<оператор вывода>::=write(<выражение>{,<выражение>})

1.2. Семантика входного языка.

1.2.1. Встроенные типы данных входного языка.

Имя типа

Размер, байт

Описание хранимых данных

integer

4

Целые числа в диапазоне -32768..32767

rational

8

Рациональные числа, числитель в диапазоне от -32768..32767, знаменатель в диапазоне от -32768..32767

Входной язык также поддерживает перечислимый и ограниченный типы.

- Ограниченный тип описывает множество чисел, находящихся между двумя значениями заданных константных выражений. Это множество должно быть перечислимым, следовательно, значения константных выражений должны быть целыми числами. Все результирующие и промежуточные (полученные на каком-то шаге вычисления) значения константных выражений должны соответствовать ограничениям, накладываемым на встроенный тип Integer. В случае несоответствия компилятор вернет ошибку компиляции.

- Перечислимый тип описывает последовательность идентификаторов, значение которых не определено, зато определен порядок (на самом деле стоит определить еще и значение).

1.2.2. Операции входного языка и их приоритет.

Операции перечислены в порядке убывания приоритета (чем выше в таблице расположена операция, тем раньше она выполняется). Операции разбиты на приоритетные группы: унарные операции всегда выполняются раньше других, затем бинарные операции из мультипликативной группы, затем бинарные операции из аддитивной группы). Операции выполняются без учета переполнения.

Знак операции

Порядок выполнения и особенности исполь-зования

Семантический смысл

int

Слева направо,

Унарный

Возвращает целую часть рационального числа (rational). Определен только для типа rational. Тип возвращаемого значения integer.

frac

Слева направо,

Унарный

Возвращает дробную часть рационального числа (rational). Определен только для типа rational. Тип возвращаемого значения rational.

simplify

Слева направо,

Унарный

Возвращает правильное рациональное число (rational). Определен только для типа rational. Тип возвращаемого значения rational.

+

Слева направо,

Унарный

Унарный плюс, определен для числовых переменных, возвращает переменную такого же типа, что и получает. Не меняет знак числа.

-

Слева направо,

Унарный

Унарный минус, определен для числовых переменных, возвращает переменную такого же типа, что и получает. Меняет знак числа на противоположный.

*

Слева направо,

Бинарный

Умножение, определено для числовых переменных. Если один из операндов имеет тип rational, то результат будет типа rational, иначе integer.

/

Слева направо,

Бинарный

Деление, определено для числовых переменных. Если один из операндов имеет тип rational, то результат будет типа rational, иначе integer.

+

Слева направо,

Бинарный

Сложение, определено для числовых переменных. Если один из операндов имеет тип rational, то результат будет типа rational, иначе integer.

-

Слева направо,

Бинарный

Вычитание, определено для числовых переменных. Если один из операндов имеет тип rational, то результат будет типа rational, иначе integer.

Соседние файлы в папке Бяша