Скачиваний:
8
Добавлен:
01.05.2014
Размер:
130.56 Кб
Скачать

0. Оглавление

0. Оглавление 1

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

1.1. Исходная постановка задачи 2

1.2. Соглашения об обозначениях 2

1.3. Лексика языка 2

1) Алфавит 2

2) Лексемы и разделители 2

3) Комментарии 3

4) Идентификаторы и ключевые слова 3

5) Константы 3

1.4 Объекты, операции, описания 4

1) Объекты и операции над ними 4

2) Описания 4

1.5. Выражения 5

1) Первичные выражения 5

2) Постфиксные выражения 5

3) Унарные операторы 5

4) Мультипликативные операторы 5

5) Аддитивные операторы 6

6) Операторы отношения 6

7) Оператор логического И 6

8) Оператор логического ИЛИ 6

9) Выражение присваивания 6

1.6. Операторы 7

1) Оператор-выражение 7

2) Составной оператор 7

3) Условный оператор 7

4) Оператор цикла 8

5) Оператор перехода 8

6) Операторы ввода и вывода 8

1.7. Программа 8

2. Синтаксический анализатор 9

2.1. Подграмматика выражений 9

Атрибутная грамматика 10

Семантические процедуры 11

2.2. Подграмматика описаний 14

Атрибутная грамматика 14

Семантические процедуры 15

2.3. Основная грамматика 15

Атрибутная грамматика 15

Семантические процедуры 16

Приложение 1. Таблицы лексем 18

Приложение 2. Описания триад 20

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

1.1. Исходная постановка задачи

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

Объектами языка являются переменные, константы и массивы целого и вещественного типов и вектора с вещественными компонентами. Кроме заданных предопределённых типов разрешается использовать ограниченные типы и определять собственные типы.

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

В языке должны быть определены следующие операции над векторами::

  • определение длины вектора;

  • сумма векторов;

  • скалярное произведение векторов;

  • умножение константы или простой переменной целого или вещественного типа на вектор;

Состав операторов:

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

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

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

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

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

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

  • оператор цикла с предусловием, условие в котором задаётся отношением;

Метод синтаксического анализа – алгоритм синтаксического анализа для LL(1)-грамматик.

1.2. Соглашения об обозначениях

В первой части синтаксис описывается с помощью модифицированных БНФ.

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

Жирнымшрифтом выделяются терминалы

[В квадратные скобки]берутся элементы синтаксической конструкции, которые могут отсутствовать.

{ В фигурные скобки } берутся элементы, которые могут повторяться 0 или более раз.

1.3. Лексика языка

1) Алфавит

  • В алфавит языка входят следующие символы:

  • 52 английские буквы и символ подчёркивания: A .. Z a .. z _

  • 10 цифр: 0 .. 9

  • 20 специальных символов: [ ] { } ( ) < = > | & ! + - * / . ; "

  • пробел, символ табуляции, символ перевода строки.

2) Лексемы и разделители

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

  • Однобуквенные разделители: [ ] { } ( ) < = > ! + - * /

  • Двухбуквенные разделители - следующие комбинации специальных символов:

  • меньше или равно <=

  • больше или равно >=

  • равно ==

  • не равно !=

  • конъюнкция &&

  • дизъюнкция ||

  • промежуток ..

3) Комментарии

Текст, заключённый между символами /*и*/, считается комментарием и игнорируется.

4) Идентификаторы и ключевые слова

Идентификатор– последовательность букв, цифр и символов подчёркивания, начинающаяся не с цифры. При помощи идентификаторов ссылаются на typedef-имена и объекты.

Следующие ключевые словазарезервированы и не могут быть использованы в качестве идентификаторов:

double

else

goto

if

input

int

len

limited

output

return

typedef

vector

while

5) Константы

константа: целая_константа вещественная_константа

целая_константа: [знак] без_знака

знак: + или -

без_знака: цифра { цифра }

вещественная константа: [знак] без_знака . без_знака [ порядок ] [знак] без_знака порядок

порядок: E целая_константа e целая_константа

Строковые константы могут использоваться только в операторе вывода и представляют собой текст, заключённый в двойные кавычки.

строковая_константа: " { символ } "

1.4 Объекты, операции, описания

1) Объекты и операции над ними

Объект – именованная область памяти, имеющая тип и интерпретирующаяся в соответствии с ним. Кроме того, объектами будем называть константы. l-value – выражение, ссылающееся на неконстантный объект.

Существует три базовых типа – целый (int), вещественный (double) и вектор (vector). Диапазон значений объектов int – от -2147483648 до 2147483647 (32 бита). Диапазон double – от 1.7E-308 до 1.7E+308 (абсолютные значения).

На основе базовых типов могут создаваться выводимые типы:

  • массивы из объектов заданного типа

  • ограниченные типы – на базе int

Определены следующие операции над объектами:

Операция

Тип операции

Операнды

Результат

+

унарная

int, double, vector

int, double, vector

-

унарная

int, double, vector

int, double, vector

+, -, *

бинарные

int, double, vector

int, double, vector

/

бинарная

int, double

int, double

<, >, <=, >=, ==, !=

бинарные

int, double

int

&&, ||

бинарные

int

int

!

унарная

int

int

[ ], len

унарные

vector

double

Соседние файлы в папке Курсовая работа