3. Грамматика языка милан
Начальным символом грамматики естественно выбран нетерминал <программа>. Каждая программа на языке МИЛАН начинается со слова BEGIN и заканчивается словом END. Между этими словами расположены операторы, разделенные символом «;». Типов операторов в МИЛАНе четыре: вывод, присваивание, развилка, цикл. Будем считать, что в качестве условия в МИЛАНе можно использовать пару выражений, разделенных знаками отношения. Терминалы грамматики языка МИЛАН приведены в таблице.
Терминалы грамматики языка милан
Терминалы |
Обозначения |
ключевые слова |
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 |
4. Варианты заданий
Грамматика языка МИЛАН должна быть расширена оператором-переключателем, оператором цикла, комментариями и дополнительными операциями (инкремент, декремент).
Рассмотрим варианты реализации конструкции <оператор-переключатель>:
1) <оператор-переключатель>::= SWITCH (<выражение>) { CASE <константа> : <последовательность операторов> { CASE <константа> : <последовательность операторов> } [ DEFAUT : <последовательность операторов> ] }
2) <оператор-переключатель>::= DO CASE CASE <условие> <последовательность операторов> { CASE <условие> <последовательность операторов> } [ OTHERWISE <последовательность операторов> ] ENDCASE
3) <оператор-переключатель>::= CASE <идентификатор> OF <константа> {, <константа>} : <последовательность операторов> { <константа> {, <константа>} : <последовательность операторов> } [ ELSE <последовательность операторов> ] ENDCASE |
Рассмотрим варианты реализации дополнительных операторов цикла:
1) <цикл-FОR>::= FOR <идентификатор> := <выражение> TO <выражение> [STEP <выражение>] <последовательность операторов> ENDFOR 2) <цикл-REPEAT>::= REPEAT <последовательность операторов> UNTIL <условие> |
Рассмотрим варианты реализации комментариев:
1) Комментарий в фигурных скобках. Пример: { раздел описания переменных } 2) Комментарий в круглых скобках со звездочкой. Пример: (* раздел описания переменных *) 3) Комментарий за двойной косой чертой до конца строки. Пример: // раздел описания переменных 4) Комментарий внутри косых черт со звездочкой. Пример: /* раздел описания переменных */ |
Рассмотрим варианты реализации дополнительных операций:
1) ++ : инкремент (увеличение значения переменной на 1) 2) -- : декремент (уменьшение значения переменной на 1) |
Условия модификации грамматики языка МИЛАН (по вариантам) приведены в таблице.
Таблица
