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

Операторы

  1. Оператор присваивания: старое значение переменной заменяется новым значением, которое получается в результате вычисления выражения.

  2. Оператор перехода: метка в операторе перехода должна быть предварительно описана и должна встречаться в блоке один раз.

  3. Условный оператор: Вычисляется логическое выражение. Если значение логического выражения «истина», то выполняется оператор, следующий за ключевым словом then, в противном случае выполняется оператор, следующий за ключевым словом else. Если после слова then следует условный оператор, то он должен заключатся в beginend для избежания неопределенности типа: if <выр> then if <выр> then <оператор> else <оператор>

  4. Оператор цикла:

  1. Выполняются операторы, за ключевым словом repeat.

  2. Вычисляется логическое выражение за ключевым словом until, если выражение истинно, то происходит выход из цикла, если ложно, то повторяется п.1.

  1. Оператор ввода, переменная, указанная в параметрах оператора принимает значение полученное с консоли. Считываемое значение должно быть того же типа, что и переменная указанная в параметрах.

  2. Операторы вывода, если среди параметров встречается выражение, то оно вычисляется, далее список параметров последовательно выводится на консоль.

Лексический анализ Типы лекскем

идентификаторы

id констант (предопределенные константы: false, true)

id типов (предопределенные типы: boolean, integer, byte, word, longint, shortint)

id переменных

id меток

константы

idn (числовые)

bool (логические) (false, true)

зарезервированные слова

and, begin, boolmatr, const, div, else, end, goto, if, mod, not, of, or, program, repeat, shl, shr, then, type, until, var, xor.

операторы

read, readln, write, writeln, :=

знаки операций

арифметические -,*, /, +, -,

логические not, and, div, mod, or, xor,

отношения <, <=, >, >=, =, <>

разделители

; | пробел | . | , | : | табулятор | признак конца строки | знаки операций | ( | ) | { | }

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

<Буква>::=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

<символы>::=*, /, +, -, <, <=, >, >=, =, , :=, <>, (*, *), , , {, }, :, ; , . , ..

Диаграмма детерминированного конечного преобразователя, который выделяет одну лексему из потока литер:

Диаграммы переходов

Знак – прочитанная

буква или цифра.

неверный идентификатор

Описание процедур выполняемых при переходе между состояниями.

SS1 – чтение лексемы, определение (символ, число, идентификатор)

SS– вывод сообщения об ошибке

S1B– опеределение типа лексемы

S1N– Проверка, является ли число меткой.

S1out– вывод символа в выходной поток.

Nout– вывод числа в выходной поток

BO– лексема оператор, проверка в таблице вывод кода в выходной поток

BW– лексема зарезервированное слово, проверка в таблице

BA– лексема арифметическая операция, проверка в таблице

BR– лексема операция отношения, проверка в таблице

BC– лексема константа, проверка в таблице, если секция констант занесение в таблицу

BT– лексема тип, проверка в таблице, если секция типов занесение в таблицу

BV– лексема переменная, проверка в таблице, если секция переменных занесение в таблицу

BS– лексема строка, занесение в таблицу

BL– лексема метка, проверка в таблице, если секция меток занесение в таблицу

NL– лексема метка, проверка в таблице, если секция меток занесение в таблицу

Oout- вывод кода оператора в выходной поток

Wout- вывод кода зарезервированного слова в выходной поток

Aout- вывод кода арифметической операции в выходной поток

Rout- вывод кода операции отношения в выходной поток

Cout- вывод кода константы в выходной поток

Tout- вывод кода типа в выходной поток

Vout- вывод кода переменной в выходной поток

Sout- вывод кода строки в выходной поток

Lout- вывод кода метки в выходной поток

outF– проверка правильности использования меток

outS1 – чтение следующей лексемы

outE– вывод сообщения об ошибке.