Лексемами являются: переменные, символы и ключевые слова,
целые числовые литералы, вещественные числовые литералы, сегменты строк, ограничители.
В ходе сканирования текста происходит преобразование информации,
поэтому в определении языка различаются собственно «лексемы»,
воспринимаемые лексическим анализатором, и «значения лексем», которые
обрабатывает синтаксический анализатор.
Маленькие буквы в составе переменной заменяются соответствующими большими буквами, при этом все остальные графемы остаются без изменений. Полученная последовательность графем считается значением лексемы.
Переменная «_» называется «анонимной». Считается, что все анонимные переменные являются некоторыми уникальными, однократно использованными именами.
Символ — это имя, начинающееся с маленькой буквы или заключённое
в апострофы. Различаются простые символы и символы в апострофах:
символ = простой_символ | символ_в_апострофах
простой_символ =
маленькая_буква [ [ "_" ] буквы_и_цифры ]
символ_в_апострофах = ' { графема }
Большие буквы в составе символа заменяются соответствующими
маленькими буквами, при этом все остальные графемы остаются без изменений.
Полученная последовательность графем считается значением символа. Апострофы,
в которые может быть заключён символ, не являются составными частями его значения.
Если апострофы не используются, значение символа не должно совпадать с ключевыми
словами языка.
Ключевыми словами являются следующие имена:
as
class
import
from
package
project
protecting
specializing
suspending
под_именем
класс
импортировать
из
пакет
проект
защищающий
специализирующий
отключающий
Для написания ключевых слов языка используются только маленькие буквы.
Значениями ключевых слов считаются соответствующие цепочки графем.
Числовые литералы бывают целые и вещественные (плавающие) — значениями таких
литералов являются, соответственно, (беззнаковые) целые и вещественные числа.
По умолчанию основание числового литерала равно 10.
Основание и порядок числовых литералов всегда записываются
в десятичной системе. В качестве (расширенных) цифр от 10
до 35 используются латинские буквы от «А» до «Z» (от «а» до
«z») соответственно. Значение каждой (расширенной) цифры
литерала с основанием должно быть меньше основания.
Числовые литералы, содержащие точку, обозначают вещественные
числа. В языке не гарантируется точное представление
вещественных чисел, количество значащих цифр которых
превышает значение, соответствующее максимальной
относительной погрешности D, определяемой конкретной
реализацией языка. В качестве значений таких числовых
литералов принимаются некоторые близкие числа, отличающиеся
от них на величину, не превышающую D.
Если в качестве числового литерала используется последовательность
графема, его значением является числовой код заданного
графического символа (целое число) в кодировке,
определяемой конкретной реализацией языка. Использование
пробела, так же как и управляющих символов в определении
числового литерала не допускается (считается синтаксической ошибкой).
цифры = [ цифры [ "_" ] ] цифра
Символы подчёркивания между соседними цифрами и буквами
числового литерала не влияют на его значение.
Для получения значения числового литерала с порядком
необходимо умножить значение числового литерала без порядка
на основание, возведённое в указанную порядком степень.
Порядок целых числовых литералов не может содержать знак минус.
Сегмент строки — это лексема, обозначающая цепочку
графических и управляющих символов:
сегмент_строки = '"' { графема | "\" код } '"'
В ходе сканирования сегмента строки конструкции вида «\»
код (где код — некоторая буква или числовой литерал)
заменяются соответствующими графическими и управляющими символами.
Буквенные коды соответствуют управляющим символам:
b — возврат на одну позицию;
t — горизонтальная табуляция;
г — возврат каретки;
n — перевод строки;
v — вертикальная табуляция;
f — перевод формата;
В качестве кода в сегменте строки не допускается (считается синтаксической ошибкой)
использование вещественных числовых литералов, а также числовых литералов, значения которых
лежат за пределами некоторого интервала, определяемого конкретной реализацией языка. В случае если
графический символ, следующий после «\», не является кодом, переключатель «\» игнорируется, а
обнаруженный за ним графический символ включается в сегмент строки без дальнейшего анализа. Полученная
таким образом последовательность графических и управляющих символов, не считая кавычек, в которые заключён
сегмент строки, является значением сегмента строки.
Ограничитель — это последовательность из одного или
нескольких специальных символов, используемая в
синтаксических конструкциях языка. В языке используются:
1.простые ограничители
!#()* + ,-./:;< = >?[]{|}
2.составные ограничители
:- << <- ?? == := О <= >=
Значениями ограничителей считаются
соответствующие цепочки графем.