- •Комитет образования рф
- •Отчёт по курсовой работе
- •Языки программирования и методы трансляции
- •1.2. Формализм для описания синтаксиса.
- •1.3.6. Ключевые слова.
- •1.3.7. Строки.
- •1.4. Описания и типы.
- •1.4.1. Целый и булевый типы.
- •1.4.2. Выражения.
- •1.4.3. Описания.
- •3. Описание синтаксического анализатора.
- •3.1. Описание языка
- •Грамматика № 1_3. Метка
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’<имя> ';’<блок>
2. Описание лексического анализатора.
Вход лексического анализатора: последовательность литер.
Выход лексического анализатора: последовательность лексем. Каждая лексема состоит из двух полей:
поле, хранящее класс лексемы.
поле, хранящее номер лексемы внутри класса.
2.1. Классы литер.
Разделим множество литер на следующие классы:
|
Класс 0 |
неопознанный символ |
|
Класс 1 |
заглавные и строчные буквы латинского алфавита, кроме E, e |
|
Класс 2 |
цифра |
|
Класс 3 |
‘,’,’.’,’=’,’+’,’-‘,’(‘,’)’,’*’,’[‘,’]’, |
|
Класс 4 |
: |
|
Класс 5 |
> |
|
Класс 6 |
< |
|
Класс 7 |
ord(letter)=39 |
|
Класс 8 |
{ |
|
Класс 9 |
} |
|
Класс 10 |
; |
2.2. Классы лексем.
Все лексемы разделены на следующие классы:
Ключевые слова.
Идентификаторы переменных .
3)Однолитерные разделители.
4)Двулитерные разделители.
5)Символьная константа.
6)Числовая константа.
В течении работы алгоритма на вход лексического анализатора попадают
различные литеры и взависимости от них или последущей литеры лексический
анализатор выполняет те или иные действия по созданию лексем :
(см. диаграмму лексического анализатора в приложении 1.)
