По коду и месту ошибки вы можете определить, что исправить: запись токена или структуру выражения. Начните с цитированного списка, затем сравните ошибки чтения, проверки форм и вычисления.
Прочитайте список как данные
Вставьте эту программу целиком в песочницу.
'(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 выполните:
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 отклоняется до чтения. Лиспекс сохраняет запись исходника без автоматического преобразования переводов строк, путей и кодировки вызывающего приложения.