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

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. Описание лексического анализатора.

Вход лексического анализатора: последовательность литер.

Выход лексического анализатора: последовательность лексем. Каждая лексема состоит из двух полей:

  1. поле, хранящее класс лексемы.

  2. поле, хранящее номер лексемы внутри класса.

2.1. Классы литер.

Разделим множество литер на следующие классы:

Класс 0

неопознанный символ

Класс 1

заглавные и строчные буквы латинского алфавита, кроме E, e

Класс 2

цифра

Класс 3

‘,’,’.’,’=’,’+’,’-‘,’(‘,’)’,’*’,’[‘,’]’,

Класс 4

:

Класс 5

>

Класс 6

<

Класс 7

ord(letter)=39

Класс 8

{

Класс 9

}

Класс 10

;

2.2. Классы лексем.

Все лексемы разделены на следующие классы:

  1. Ключевые слова.

  2. Идентификаторы переменных .

3)Однолитерные разделители.

4)Двулитерные разделители.

5)Символьная константа.

6)Числовая константа.

В течении работы алгоритма на вход лексического анализатора попадают

различные литеры и взависимости от них или последущей литеры лексический

анализатор выполняет те или иные действия по созданию лексем :

(см. диаграмму лексического анализатора в приложении 1.)

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