/Lexer

Primary LanguageC#

Lexer

РАЗРАБОТКА ЛЕКСИЧЕСКОГО АНАЛИЗАТОРА

БНФ

<Программа> ::= <Объявление переменных> <Описание вычислений>.
<Описание вычислений> ::= 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.

Вывыод программы

Вывод

В ходе выполнения лабораторной работы был разработан лексический анализатор.