Песочница

Как Лиспекс читает код

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

По коду и месту ошибки вы можете определить, что исправить: запись токена или структуру выражения. Начните с цитированного списка, затем сравните ошибки чтения, проверки форм и вычисления.

Прочитайте список как данные

Вставьте эту программу целиком в песочницу.

LISPEX
'(alpha 1 2/3 #u8(4 5))

Результат

ВЫВОД
(alpha 1 2/3 #u8(4 5))

Начальная кавычка сохраняет список как данные. В нём находятся символ alpha, целое число, рациональное число и байтовый вектор. Без кавычки Лиспекс ищет значение имени alpha для вызова процедуры.

Различайте три этапа

Токен — это отдельный фрагмент исходного текста, например alpha или 2/3. Считыватель распознаёт токены и собирает из них списки и другие структуры данных.

Нормализатор проверяет структуру выражений и преобразует сокращения в основные формы. Например, он проверяет наличие условия и обеих ветвей if. Затем при вычислении Лиспекс ищет значения имён, вызывает процедуры и получает результаты.

Запускайте примеры ниже по отдельности. Таблица показывает код диагностики, а не полное сообщение.

Исходный текстЭтап, на котором возникает ошибкаЧто исправить
(list 01)считыватель, E100Напишите 1 без ведущего нуля
(if #t 1)нормализатор, E130Добавьте вторую ветвь: (if #t 1 0)
(alpha 1)вычисление, E300Определите alpha до вызова

Последняя строка предполагает, что alpha ещё не определено. Скобки и токены в этом примере записаны верно.

При запуске файла Лиспекс читает и нормализует весь файл до вычисления. Поэтому ошибка чтения или формы не даст выполниться даже предшествующему display.

Выберите запись

Что требуетсяЗаписьЗначение
имяalphaсимвол для поиска значения
текст"alpha"неизменяемая строка
список как данные'(alpha 1)цепочка пар, заканчивающаяся пустым списком ()
пара с другим хвостом'(alpha . 1)одна пара с хвостом 1
значения с доступом по индексу#(1 2)вектор
байты#u8(1 2)неизменяемый байтовый вектор

Считыватель также принимает знаки, квазицитирование и комментарии. Их запись и правила для чисел приведены в грамматике чтения.

Найдите место ошибки

Диагностика Native показывает код, файл, строку, столбец и сообщение. Сохраните единственную строку (list 01) в файле bad-token.lspx. После установки Native CLI выполните:

SH
lispex run bad-token.lspx

Команда пишет в стандартный поток ошибок:

E100 bad-token.lspx:1:7 malformed numeric literal: `01`

Код завершения — 1. Стандартный вывод пуст, новые файлы не создаются. Столбец 7 указывает на начало 01.

Ошибки чтения включают E100 для неверных токенов и E150 для неверных экранирующих последовательностей. Вещественный литерал вне конечного диапазона даёт E314 при чтении. Смотрите и код, и сообщение.

Сохраняйте исходный текст в UTF-8. Неверный UTF-8 отклоняется до чтения. Лиспекс сохраняет запись исходника без автоматического преобразования переводов строк, путей и кодировки вызывающего приложения.

Порядок вычисления · Зарезервированные и запрещённые имена