I.4. Правила, определяющие идентификатор, букву и цифру
I. Правила, используемые в лексическом анализаторе
I.1. Тип лексического анализатора (сканера)
Существуют два основных метода лексического анализа:
I.1.1 прямой и I.1.2 непрямой.
Они рассматриваются в теме: "Организация лексического анализа". Этот тип лексического анализатора будет использоваться в лабораторной работе для преобразования пользовательского синтаксиса к виду, определяемому заданным значением.
I.2. Наборы ключевых слов и разделителей
Разрабатываемые языки программирования отличаются используемыми ключевыми словами и разделителями.
Варианты стиля ключевых слов и разделителей:
I.2.1 Паскаль.
Таблица
Назначение специфических ключевых слов и разделителей
Назначение | Обозначение конструкции языка | Обозначение лексемы |
Сложение | + | ADD |
Вычитание | - | MIN |
Умножение | * | MULT |
Деление | / | DIV |
Остаток по модулю | mod | MOD |
Равно | = | EQ |
Не равно | <> | NE |
Меньше | < | LT |
Больше | > | GT |
Меньше или равно | <= | LE |
Больше или равно | >= | GE |
Присваивание | := | ASG |
Начало комментария | { | COMMENT |
Конец комментария | } | |
Начало составного | begin | BST |
Конец составного | end | EST |
Разделитель операторов | ; | EOP |
I.2.2. Си
Таблица
Назначение специфических ключевых слов и разделителей
Назначение | Обозначение конструкции языка | Обозначение лексемы |
Сложение | + | ADD |
Вычитание | - | MIN |
Умножение | * | MULT |
Деление | / | DIV |
Остаток по модулю | % | MOD |
Равно | == | EQ |
Не равно | != | NE |
Меньше | < | LT |
Больше | > | GT |
Меньше или равно | <= | LE |
Больше или равно | >= | GE |
Присваивание | = | ASG |
Начало комментария | /* | COMMENT |
Конец комментария | */ | |
Начало составного | { | BST |
Конец составного | } | EST |
Разделитель операторов | ; | EOP |
I.2.3 Бейсик.
Таблица
Назначение специфических ключевых слов и разделителей
Назначение | Обозначение конструкции языка | Обозначение лексемы |
Сложение | + | ADD |
Вычитание | - | MIN |
Умножение | * | MULT |
Деление | / | DIV |
Остаток по модулю | mod | MOD |
Равно | = | EQ |
Не равно | <> | NE |
Меньше | < | LT |
Больше | > | GT |
Меньше или равно | <= | LE |
Больше или равно | >= | GE |
Присваивание | = | ASG |
Начало комментария | REM | COMMENT |
Конец комментария | конец строки | |
Разделитель операторов | ; | EOP |
I.2.4. Лисп
Таблица
Назначение специфических ключевых слов и разделителей
Назначение | Обозначение конструкции языка | Обозначение лексемы |
Сложение | PLUS | ADD |
Вычитание | MINUS | MIN |
Умножение | MULT | MULT |
Деление | DIV | DIV |
Остаток по модулю | MOD | MOD |
Равно | EQ | EQ |
Не равно | NE | NE |
Меньше | LT | LT |
Больше | GT | GT |
Меньше или равно | LE | LE |
Больше или равно | GE | GE |
Присваивание | LET | ASG |
Начало комментария | // | COMMENT |
Конец комментария | Признак конца строки | |
Начало составного | DO | BST |
Конец составного | END | EST |
Разделитель операторов | ; | EOP |
I.2.5. Фортран
Таблица
Назначение специфических ключевых слов и разделителей
Назначение | Обозначение конструкции языка | Обозначение лексемы |
Сложение | + | ADD |
Вычитание | - | MIN |
Умножение | * | MULT |
Деление | / | DIV |
Остаток по модулю | DMOD | MOD |
Равно | .EQ. | EQ |
Не равно | .NE. | NE |
Меньше | .LT. | LT |
Больше | .GT. | GT |
Меньше или равно | .LE. | LE |
Больше или равно | .GE. | GE |
Присваивание | = | ASG |
Начало комментария | * | COMMENT |
Конец комментария | конец строки | |
Разделитель операторов | ; | EOP |
I.3. Идентичность прописных и строчных букв (верхнего и нижнего регистров)
Существуют языки программирования, в которых эквивалентные по значению ключевые слова, идентификаторы, метки и другие имена можно задавать с любым сочетанием прописных и строчных букв, так как регистр символа игнорируется. В качестве примера можно назвать Бейсик и Паскаль. В этом случае в блоке лексического анализа имеется специальный модуль, преобразующий поступающие буквы к одному регистру (верхний или нижний регистр выбираются произвольно или с учетом соглашений, принятых в операционной системе при работе с внешними устройствами). В других языках, например Си, верхний и нижний регистр различаются. В этом случае регистр ключевых слов отдается на усмотрение разработчика.
Варианты:
I.3.1. прописные и строчные буквы различаются.
I.3.2. прописные и строчные буквы не различаются.
I.4. Правила, определяющие идентификатор, букву и цифру
Варианты: I.4.1.
$ идентификатор = буква { буква | цифра }.
$ буква = "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"|"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".
I.5. Организация метки
Метка состоит из ее имени и двоеточия, являющегося ограничителем данной конструкции. Имя метки может быть буквенно-цифровой строкой или целым десятичным числом. Предполагается, что во втором случае имя метки преобразуется в натуральное число в допустимом диапазоне. Поэтому, для одной и той же метки ее представление может отличаться по числу незначащих нулей. Например, метка "1995:" эквивалентна "00001995:".
Варианты:
I.5.1.
Метка - буквенно-цифровая строка:
$ метка = имя_метки ":".
$ имя_метки = буква { буква | цифра }.
I.5.2.
Метка - строка десятичных цифр:
$ метка = имя_метки ":".
$ имя_метки = {/ цифра /}.