1. Описание входного языка.
1.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'
Строчные и заглавные буквы различаются. Ограничение на длину: длина идентификатора не может быть больше 30 символов.
1.3.5. Константы.
Константы подразделяются на целые и вещественые. Значение константы определяется единожды и не может изменяться.
<константа>::=<константа_без_знака>
<знак>::='+'|'-'
<константа_без_знака>::=<имя_константы>|<число_без_знака>
<имя_константы>::=<идентификатор>
<число_без_знака>::=<целое_без_знака>['.'<целое_без_знака>]['E'<знак>
<целое_без_знака>]
<целое_без_знака>::=<цифра>{<цифра>}
1.3.6. Ключевые слова.
Следующие ключевые слова считаются зарезервированными и не могут использоваться в качестве идентификаторов:
int float void main goto length for if else scanf printf vector const
Ключевые слова воспринимаются как единые символы с фиксированным смыслом, который задан в определении языка.
1.3.7. Строки.
Строками считаются последовательность любых символов, заключенных в
"кавычки" .
1.4. Описания и типы.
1.4.1. Целый тип.
Целочисленный знаковый тип int : размер 2 байта, диапазон -32768..32767.
Вещественный тип float : размер 4 байта, диапазон +-3.4*10**(+-38)
Тип вектора vector с вещественными компонентами: максимальное число компонент 16383.
Операции:
Оператор |
тип оператора |
допустимые типы параметров |
+ |
унарный |
int, float, vector |
- |
унарный |
int, float, vector |
+ |
бинарный |
int, float, vector |
- |
бинарный |
int, float, vector |
* |
бинарный |
int, float, vector |
/ |
бинарный |
int, float |
[ ] |
унарный |
vector |
Length |
унарный |
vector |
&& |
бинарный |
int |
|| |
бинарный |
int |
==, !=, <, >, <=, >= |
бинарные |
int, float |
! |
унарный |
int |