<Программа> ::= <Объявление переменных> <Описание вычислений>.
<Описание вычислений> ::= Begin <Список присваиваний> End.
<Объявление переменных> ::= Var <Список переменных> :Boolean;
Var <Список переменных> :Boolean;| <Объявление переменных>
<Объявление переменных> ::= Var <Список переменных> :Decimal;|
Var <Список переменных> :Decimal; <Объявление переменных>
<Список операторов> ::= <Оператор> | <Оператор> <Список операторов>
<Оператор>::=<Присваивание> |<Сложный оператор>
<Присваивание> ::= <Идент> := <Выражение>
<Выражение> ::= <Ун.оп.> <Подвыражение> | <Подвыражение>
<Подвыражение> :: = ( <Выражение> ) | <Операнд> |
< Подвыражение > <Бин.оп.> <Подвыражение>
<Ун.оп.> ::= "!"
<Бин.оп.> ::= "&" | "|" | "^" | "-" | "+" | "*" | "/" | ">" | "<" | "=="
<Операнд> ::= <Идент> | <Const>
<Сложный оператор> ::= IF "("< Выражение> ")" Оператор|
IF "(" <Выражение> ")" <Оператор> ELSE <Оператор>
<Операнд> ::= <Идент> | <Const>
<Идент> ::= <Буква> <Идент> | <Буква>
<Const> ::= < LConst >|< DConst >
< DConst ><Цифра> |<Цифра><DConst>
< LConst > ::= 0|1
- Id - идентификатор
- Const - константа
- KeyWord - ключевое слово
- BinaryOoperator - бинарный оператор
- UnaryOoperator - унарный оператор
- Separator - разделитель
- EndToken - конечная лексема
- Undefined - неопределённая лекскма
Lexer/Lexer/Source/source1.txt:
Var
ab, c: Boolean;
m, d, k: Decimal;
Begin
If (k == d)
Begin
m := d + m
End
Else
c := 0
ab := 1
End.
Lexer/Lexer/Source/source2.txt:
Var
ab, c: Integer;
Begin
a
End.
В ходе выполнения лабораторной работы был разработан лексический анализатор.