реализовать примитив цит (quote)

Issue #6 closed
Denis Budyak repo owner created an issue

Имеется класс операции Коя-цит

На данный момент нужно, чтобы цит(символ-яра) вставляло в генерируемый исходный текст на лиспе значение (quote соответствующий-лисповый-символ) . Навигация к исходному тексту и остановка в пошаговом отладчике после вычисления такого значения не нужна.

Пока что я не понимаю, как поступить: в лиспе есть reader, который сам определяет, что он будет читать, т.к. в лиспе нет зависимости от контекста. В Яре не так - reader-у нужно сказать, что мы сейчас ожидаем. Например, на верхнем уровне модуля мы ожидаем определение функции. Внутри составного оператора мы ожидаем оператор. Это разные ридеры. Значит, в определении ц нам явно не хватает указания на то, что будет находиться внутри цитаты.

На это у нас есть такое спасение, как "одетый синтаксис", который подобен лиспу в том, что по первому слову однозначно определяется, какой элемент синтаксиса написан. Тогда ридер становится способен прочитать что угодно в любом контексте. Но он, во-первых, не прописан для символов, во-вторых одетый синтаксис для простого имени будет слишком многословен (будет что-то типа п-имя символ кнп), в третьих, он не реализован.

Поэтому на данном этапе цит для выражения пусть называется цив и ожидает внутри себя выражение. Парсер, к-рым нужно разбирать содержимое, называется П-Я-ГРАМОТЕЙ:Парсить-выражение-до-конца . Сделать по аналогии с тем, как при разборе получается П-В-Простой-вызов-функции .

Не исключено, что вообще можно объявить цив как бы функцией, и сопоставить ей символ quote. Тогда ничего не понадобится делать (кроме заполнения метаданных) или понадобится внести минимальные изменения в разбор вызова функции.

Результат грамм разбора Цив является выражением (нужно прорастить потомка от П-Я-ГРАМОТЕЙ:П-Выраж)

Comments (5)

  1. Denis Budyak reporter

    monk: В чём разница между

    нов массив цит(5)

    и

    нов массив 5

    В смысле, в CL 5 и '5 -- одно и то же. Как тут?

  2. Denis Budyak reporter

    Так же и будет. цит(5) превратится в 5 в момент вычисления. Массивы со статически заданными границами пока не пытаемся делать.

  3. Log in to comment