Пред.Страница След.Страница  Раздел Содержание

6.2. Входной язык, лексемы, токены

В качестве примера рассмотрим входной язык, позволяющий описывать переменные целого и булевского типов, а также операторы присваивания с логическими выражениями. В выражениях могут быть использованы операции конъюнкции, дизъюнкции и отрицания, а также операции отношения. Схема грамматики, порождающей цепочки такого языка может иметь следующий вид:

 

<Программа> ::= begin <Последовательность_описаний>
                            <Последовательность_операторов>
end

<Последовательность_описаний> ::= <Описание_ перемен><Описание>

<Описание> ::= <Описание_ перемен><Описание>

<Описание> ::= $

<Тип> ::= int | bool

<Описание_ перемен> ::= <Тип><Идентификатор><Про_описание>

<Про_описание> ::= ","<Идентификатор><Про_описание>

<Про_описание> ::= ;

<Последовательность_операторов> ::= <Оператор><Про_последовательность>

<Про_последовательность> ::= <Оператор><Про_последовательность>

<Про_последовательность> ::= $

<Оператор> ::= <Идентификатор>=<Выражение>;| <Комментарий>

<Выражение> ::= <Терм><Про_выражение>

<Про_выражение> ::= & <Терм><Про_выражение>

<Про_выражение> ::= $

<Терм> ::= <Фактор><Про_терм>

<Про_терм> ::= V <Фактор><Про_терм>

<Про_терм> ::= $

<Фактор> ::= <Идентификатор> <Про_фактор>

<Фактор> ::= ( <Выражение>)| ~(<Выражение>)

<Про_фактор> ::= != <Операнд> | == <Операнд> |> <Операнд> |< <Операнд>

<Про_фактор> ::= $

<Операнд> ::= <Число> | <Идентификатор>

<Идентификатор> ::= <буква><Про_идентификатор>

<Про_идентификатор>::= <буква><Про_идентификатор>

<Про_идентификатор>::= $

<Число> ::= <цифра><Про_число>

<Про_число>::= <цифра><Про_число>

<Про_число>::= $

<Логическое значение>::= true | false

<буква>::=a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z

<цифра> ::= 0|1|2|3|4|5|6|7|8|9

<Комментарий> ::= #<Про_комментарий>

<Про_комментарий>::=<цифра><Про_комментарий>|
                                   <буква
><Про_комментарий>

<Про_комментарий> ::= #

 

Лексемами приведенного языка являются: идентификаторы, ключевые слова, числа, знаки операций и отношений, а также разделители. Условимся обозначать в тексте типы токенов заглавными латинскими буквами и жирным шрифтом. Обозначения токенов и примеры лексем приведены в следующей таблице:

 

Таблица 6.1. Примеры токенов

 

Тип

токена

Примеры лексем

Неформальное описание лексем

I

x11, alpha, pi, abcd

Буква, за которой следуют буквы или цифры

R

!=, ==, <, >

Операции отношения

N

7, 64, 1234

Последовательность цифр

K

int, begin, true

Ключевые слова

S

V, &,~,(, ), #

Логические операции и ограничители

 

Например, строка входного текста

x1 = b V ch & y12

может быть представлена, как следующая группа токенов:

< I , указатель на запись в LexTab для x1>

< = , null>

< I , указатель на запись в LexTab для b>

< V , null >

< I , указатель на запись в LexTab для ch>

< & , null >

< I , указатель на запись в LexTab для y12>.

Выбранный способ обозначения типов токенов позволяет использовать для представления в программе тип char, что в свою очередь, обеспечивает передачу значений односимвольных терминалов, соответствующих типу S, синтаксическому анализатору в поле типа токена с атрибутом типа равным null.

 

Пред.Страница След.Страница  Раздел Содержание