- •Комитет образования рф
- •Отчёт по курсовой работе
- •Языки программирования и методы трансляции
- •Описание входного языка и постановка задачи.
- •1.2. Формализм для описания синтаксиса.
- •1.3. Лексика языка.
- •1.3.1. Терминальные символы языка.
- •1.3.2. Лексемы и соглашения о разделителях.
- •1.3.4. Идентификаторы.
- •1.4.2. Выражения.
- •Комментарии.
- •2. Описание лексического анализатора.
- •2.2. Классы лексем.
- •3. Описание синтаксического анализатора.
- •3.1. Описание языка
- •Грамматика № 1_3. Метка
Комментарии.
Комментарии - любые символы, заключенные в { }.
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'
Строчные и заглавные буквы различаются. Ограничение на длину: длина идентификатора не может быть больше 20 символов.
Константы.
Значение констант определяется лишь единожды и после остается
неизменным
<константа>::=<имя>’=’<значение>
<значение>:=<выражение>
1.3.6. Ключевые слова.
Следующие ключевые слова считаются зарезервированными и не могут использоваться в качестве идентификаторов:
end array boolean const do else end false goto if integer
label not or program read then to true var while write
Ключевые слова воспринимаются как единые символы с фиксированным смыслом, который задан в определении языка.
1.3.7. Строки.
Строками считаются последовательность любых символов, заключенных в
‘кавычки’ .
1.4. Описания и типы.
1.4.1. Целый и булевый типы.
Целочисленный знаковый тип intеger : размер 2 байта, диапазон -32768..32767.
Булевый тип(логический) : размер 1 байт ,диапазон True-False(1-0)
Операции:
Оператор |
тип оператора |
допустимые типы параметров |
+ |
унарный |
integer |
- |
унарный |
integer |
+ |
бинарный |
integer |
- |
бинарный |
integer |
* |
бинарный |
integer |
/ |
бинарный |
integer |
or |
бинарный |
integer,boolean |
and |
бинарный |
integer,boolean |
=, !=, <, >, <=, >= |
бинарные |
integer,boolean |
not |
унарный |
integer,boolean |
1.4.2. Выражения.
<выражение>:=<арифметичесоке выр>|<логическое выр>
<логическое выр>:=<логическое выр>or<логическое выр>|<логическое выр1>
<логическое выр1>:=<логическое выр2>|<логическое выр>and<логическое выр2>
<логическое выр2>:=<булев_перемен>|not<<логическое выр2>
<логическое выр2>:=’(‘<логическое выр>’)’|’(‘<отношение>’)’
< булев_перемен >:=<имя>|<булево_число>
< булево_число >:=true|false
< отношение>:=<выражение><знак логической операции><выражение>
<знак логической операции>:=’>’,’<’,’=’,’>=’,’<=’
<арифметическoе выр>:=<терм>|<арифметичесоке выр>’+’(‘-‘)<терм>
<терм>:=<множ>|<терм>’*’(‘/’)<множ>
<множ>:=’(‘<арифметическoе выр>’)’|<имя>|<число>|<элемент массива>
1.4.3. Описания.
Любое описание сопоставляет с описываемым понятием некоторый идентификатор - имя переменной.
1.5. Операторы.
1.5.1. Пустой оператор.
Синтаксис :
<пустой_оператор> ::= ‘begin’ ‘end’;
Пустой оператор не производит никаких действий, однако он необходим в некоторых языковых конструкциях (например, для реализации бесконечного цикла).
1.5.2. Оператор присваивания.
Синтаксис :
<переменная>::=<идентификатор>|<оператор_элемента_вектора>
<оператор_присваивания>::=<имя>':='<выражение>’;’|<элемент массива>
'='<выражение>';'
Порядок выполнения оператора присваивания :
Вычисляется значение выражения в правой части, затем, справа налево, оно присваивается переменным в левой части, если тип значения и переменной совпадают. В противном случае присваивание не выполняется и пользователю выдается сообщение об ошибке.
1.5.3. Оператор перехода.
Синтаксис :
<оператор_безусловного_перехода>::='goto' <метка>';'
Оператор осуществляет безусловный переход к оператору, помеченому меткой. При отсутствии такового выдается сообщение об ошибке. Метка должна быть уникальной в пределах программы.
1.5.4. Оператор вывода.
Синтаксис :
<оператор_вывода>::='write'[‘(‘<строка вывода>’)’] ’;’
<cтрока вывода>::=‘<строка>’ ‘[‘,’<имя>]| ‘<cтрока>’’,’{<имя>}
<строка>::=<расшир_буква>|< расшир_буква ><строка>|’ ‘<строка>
< расшир_буква>:=<любой символ>
Оператор осуществляет вывод в стандартный поток вывода, связаный обычно с экраном дисплея, значения переменной <переменная>.
1.5.5. Оператор ввода.
Синтаксис :
<оператор_ввода>::='read'’[‘’(‘<строка ввода >’)’]’’;’
Оператор ввода осуществляет чтение из стандартного потока ввода (клавиатуры) значения.
1.5.6. Составной оператор.
Синтаксис :
<составной_оператор> ::= 'begin' {<оператор>} 'end'
Операторы, входящие в состав составного оператора, выполняются в порядке их написания.
1.5.7. Условный оператор.
Синтаксис :
<условный_оператор>::='if'<булево_выражение>'then'<непомеченный
оператор>['else'<непомеченный оператор>]
Вначале вычисляется <условное_выражение>. Если оно истинно, то выполняется первый <непомеченный оператор> иначе второй оператор, если он присутствует.
1.6. Программа.
Синтаксис :
<программа>::=’program’<имя> ';’<блок>
