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.

Метка - строка десятичных цифр:

$ метка = имя_метки ":".

$ имя_метки = {/ цифра /}.

Наши рекомендации