Терминалы грамматики языка МИЛАН

Грамматика языка МИЛАН

ИНТЕРПРЕТАТОР ЯЗЫКА МИЛАН

Начальным символом грамматики естественно выбран нетерминал <программа>. Каждая программа на языке МИЛАН начинается со слова BEGIN и заканчивается словом END. Между этими словами расположены операторы, разделенные символом «;». Типов операторов в МИЛАНе четыре: вывод, присваивание, развилка, цикл. Будем считать, что в качестве условия в МИЛАНе можно использовать пару выражений, разделенных знаками отношения. Терминалы грамматики языка МИЛАН приведены в таблице 6.

Таблица 6

Терминалы Обозначения
ключевые слова BEGIN, END, IF, THEN, ENDIF, ELSE, WHILE, DO, ENDDO,OUTPUT, READ;
знаки операций и отношений +, -, *, /, =, >, <, >=, <=, <>;
латинские буквы в нижнем регистре a, b, ..., z;
цифры 0, 1, ..., 9;
знак присваивания := ;
разделитель операторов ; .

Правила грамматики в нормальной форме Бекуса-Наура:

W= <программа> ::= BEGIN <последовательность операторов> END L= <последовательность операторов> ::= <оператор>| <оператор>;<последовательность операторов> S= <оператор> ::= <идентификатор>:=<выражение> | OUTPUT(<выражение>) | WHILE <условие> DO <последовательность операторов> ENDDO | IF <условие> THEN <последовательность операторов> ENDIF | IF <условие> THEN <последовательность операторов> ELSE <последовательность операторов> ENDIF B = <условие> ::= <выражение> <знак отношения> <выражение> E= <выражение> ::= <терм> | <операция типа сложения> <терм> | <терм> <операция типа сложения> <терм> | <операция типа сложения> <терм> <операция типа сложения><терм> T=<терм> ::= <множитель> | <множитель> <операция типа умножения> <множитель> P=<множитель> ::= <идентификатор> | <константа> | READ | (<выражение>) I=<идентификатор> ::= <буква> | <идентификатор> <буква> | <идентификатор> <цифра> K=<константа> ::= <цифра> | <константа> <цифра> O=<знак отношения> ::= > | < | >= | <= | = |<> M=<операция типа умножения> ::= * | / N=<операция типа сложения> ::= + | - A= <буква> ::= a | b | ...| z C= <цифра> ::= 0 | 1 | ...| 9

Данная грамматика недостаточно полно описывает синтаксис входной программы. Например, ключевые слова являются цепочками символов, хотя в языке это терминалы, между словами языка в тексте может быть произвольное количество пробелов и т.д.

Для устранения этих проблем предложения исходной программы удобнее представлять в виде последовательности лексем - элементов языка, внутреннее строение которых несущественно при синтаксическом анализе.

Например, лексемой может быть ключевое слово, имя переменной, константа и т.д. Просмотр исходного текста программы, распознавание и классификация различных лексем называется лексическим анализом.