Формальные языки, грамматики и основы построения трансляторов. Кревский И.Г - 33 стр.

UptoLike

33
не влияют на генерируемый в дальнейшем код, и лексический анализатор
обычно их просто исключает.
Пример структуры программы сканирования
Пусть реализуемый язык состоит только из оператора присваивания.
БНФ языка:
<Присваивание> ::= <Идент> = <Выражение>
Правило показывает, что в левой части присваиванияидентификатор,
далее следует символ присваивания (=), справавыражение;
<Выражение> ::= <Операнд> | <Операнд> <Бин
.оп> <Выражение>
Выражениеэто операнд, или операнд, за которым следует бинарная
операция и выражение;
<Бин.оп> ::= "-" | "+" | "*" | "/"
Бинарная операциясимвол арифметической операции "-", "+","*" или
"/";
<Операнд> ::= <Идент> | <Cons>
Операндэто идентификатор или константа;
<Идент> ::= <Буква>
Идентификатор состоит из одной буквы;
<Const> ::= <Цифра> <Const> | <Цифра>
Константапоследовательность цифр, состоящая хотя бы из одной
цифры.
Лексический
анализатор преобразует исходную программу в
последовательность символов. Для удобства дальнейшей обработки лексем
их разбивают на классы. В данном случае можно выделить следующие
классы лексем:
1 – идентификатор;
2 – константа;
3 – символ присваивания;
                                                                             33
не влияют на генерируемый в дальнейшем код, и лексический анализатор
обычно их просто исключает.


                    Пример структуры программы сканирования


       Пусть реализуемый язык состоит только из оператора присваивания.
БНФ языка:
       <Присваивание> ::= <Идент> = <Выражение>
       Правило показывает, что в левой части присваивания – идентификатор,
далее следует символ присваивания (=), справа – выражение;
       <Выражение> ::= <Операнд> | <Операнд> <Бин.оп> <Выражение>
       Выражение – это операнд, или операнд, за которым следует бинарная
операция и выражение;
       <Бин.оп> ::= "-" | "+" | "*" | "/"
       Бинарная операция – символ арифметической операции "-", "+","*" или
"/";
       <Операнд> ::= <Идент> | 
       Операнд – это идентификатор или константа;
       <Идент> ::= <Буква>
       Идентификатор состоит из одной буквы;
        ::= <Цифра>  | <Цифра>
       Константа – последовательность цифр, состоящая хотя бы из одной
цифры.
       Лексический       анализатор     преобразует   исходную   программу   в
последовательность символов. Для удобства дальнейшей обработки лексем
их разбивают на классы. В данном случае можно выделить следующие
классы лексем:
       1 – идентификатор;
       2 – константа;
       3 – символ присваивания;