Пред.Страница След.Страница Раздел Содержание
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.
Пред.Страница След.Страница Раздел Содержание