- •Отчет по курсовой работе
- •Языки программирования и методы трансляции
- •1. Описание входного языка.
- •1.2. Формализм для описания синтаксиса.
- •1.3. Лексика языка.
- •1.3.1. Терминальные символы языка.
- •1.3.2. Лексемы и соглашения о разделителях.
- •1.3.4. Идентификаторы.
- •1.3.5. Константы.
- •1.3.6. Ключевые слова.
- •Int float bool void main goto length for if else scanf printf vector const true false
- •1.3.7. Строки.
- •1.4. Описания и типы.
- •1.4.2. Выражения.
- •1.4.3. Описания.
- •1.4.4 Правила преобразования типов.
- •1.5. Операторы.
- •4. Описание этапа синтаксического анализа
Санкт-Петербургский Государственный Электротехнический Университет
Отчет по курсовой работе
по дисциплине
Языки программирования и методы трансляции
Выполнили:
Ст. гр. 2351
Петров А.Л.
Ходырев И.А.
Проверила:
Опалева Э.А.
Санкт-Петербург
2005
1. Описание входного языка.
1.1. Общие сведения.
В курсовой работе описывается разработка компилятора для языка, являющегося подмножеством языка Си.
Вариант: 11.
Базовый язык – Си.
Базовые типы: целый, вещественный, булевский.
Производный тип – вектор с вещественными компонентами.
Операции над векторами: определение длины вектора, сумма и разность векторов, скалярное произведение векторов, умножение вектора на число.
Оператор цикла – с параметром.
Перегрузка операций – разрешается.
Дополнительные требования – операции ++, --.
Эквивалентность типов – структурная.
Класс грамматик – SLR(1)-грамматики.
Промежуточный язык – тетрады.
Состав операторов языка :
оператор присваивания;
оператор ввода;
оператор вывода;
оператор безусловного перехода;
условный оператор, условие в котором задается отношением;
оператор цикла for;
составной оператор.
В языке должны быть определены следующие операции над векторами:
определение длины вектора;
сумма векторов;
скалярное произведение векторов;
умножение константы или простой переменной целого или вещественного типов на вектор;
1.2. Формализм для описания синтаксиса.
Синтаксис языка описан с помощью модифицированных форм Бэкуса-Наура:
- металингвистические переменные состоят из строчных букв русского алфавита и знаков подчеркивания; имя каждой переменной взято в <угловые скобки>;
- зарезервированные слова обозначаются словами английского языка, состоящими из строчных латинских букв;
- в [квадратные скобки] заключаются элементы, которые могут отсутствовать;
- повторяющиеся нуль или более раз элементы заключаются в {фигурные скобки};
1.3. Лексика языка.
1.3.1. Терминальные символы языка.
К терминальным символам языка относятся:
26 букв латинского алфавита, строчные и прописные: A B C ... Y Z a b c ... y z
33 буквы русского алфавита : А Б В ... Ю Я а б в ... ю я
10 цифр : 0 1 2 3 4 5 6 7 8 9
21 специальный символ : [ ] { } , . > < = ! + - * / " _ ( ) : & |
символа пробела
символа конца строки.
символа табуляции
1.3.2. Лексемы и соглашения о разделителях.
Текст программы разбивается на лексемы, которыми являются идентификаторы, ключевые слова, целые и вещественные числа, булевские значения, специальные символы
+ - * / ( ) [ ] { } , ; : = > < ! - однолитерные разделители.
а также комбинации специальных символов (двулитерные разделители)
<= знак оператора меньше или равно.
>= знак оператора больше или равно.
== знак оператора равно.
!= знак оператора не равно.
&& знак оператора and
|| знак оператора or.
Комментарии.
Комментарии - любые символы, заключенные в /* */.
1.3.4. Идентификаторы.
Идентификаторы используются в качестве имен для обозначения переменных, имен констант и меток.
Синтаксис :
<идентификатор>::=<буква> {<буква>|<цифра>}
<буква>::='_'|'a'|'b'|'c'|'d'|'e'|'f'|'g'|'h'|'i'|'j'|'k'|'l'|'m'|'n'|'o'|'p'|'q'|'r'|'s'|'t'|'u'|'v'|'w'|'x'|'y'|'z'|
|'A'|'B'|'C'|'D'|'E'|'F'|'G'|'H'|'I'|'J'|'K'|'L'|'M'|'N'|'O'|'P'|'Q'|'R'|'S'|'T'|'U'|'V'|'W'|'X'|'Y'|'Z'
<цифра>::='0'|'1'|'2'|'3'|'4'|'5'|'6'|'7'|'8'|'9'
Строчные и заглавные буквы различаются. Ограничение на длину: длина идентификатора не может быть больше 32 символов. Идентификатор должен быть уникальным.