#lisp #schema
#lisp #схема
Вопрос:
Я ищу инструменты, которые проверяют правильность формы / схемы S-выражений.
Знаете ли вы о таких инструментах?
Как уточнил Пол Натан, то, что я точно ищу, — это средство проверки схемы для sexp.
Комментарии:
1. Немного удивительно, что не существует схемы, позволяющей проверять представления данных на основе sexp.
2. Инструмент, который я написал много лет назад, проверял сбалансированность скобок, и это все, что вам нужно. Если вы думаете в терминах XML-схем, в чем смысл? грамматика очень проста.
3. @Paul: вы говорите о конкретной грамматике sexp, в то время как я говорю об абстрактной грамматике «языка», представленного sexp . Представьте, что я определяю новый формат на основе S-expr, помеченный выделенными «ключевыми словами»: как мне убедиться, что фактический s-expr учитывает этот формат?
4. Вы объединяете синтаксис и семантику. Синтаксически это проверяется с помощью синтаксического анализатора, то есть контекстно-свободной грамматики. Правильно сформированный sexp можно анализировать. Вопрос, касающийся ключевых слов, — это семантика; похоже, вы ищете схему и валидатор sexpr. Я не сталкивался ни с одним. Я бы подумал, что люди обычно ходят по дереву sexp и используют его; если это правильно, alles gut, если это неверно, это вызывает условие. Макрос ЦИКЛА является примером этого применительно к коду.
Ответ №1:
Я подозреваю, что вопрос OP заключается в замене стека технологий XML на S-выражения и Lisp.
Идиоматический подход к S-выражениям заключается в реализации специальных валидаторов и преобразователей, адаптированных для конкретных форматов данных. Поскольку Lisp являются почти декларативными (и они позволяют определять бесчисленные возможные декларативные языки поверх них), нет необходимости в специализированном, общем решении, таком как XML Schema или DTD.
В зависимости от используемого вами языка Lisp вы можете выбрать библиотеку сопоставления с образцом, подходящую для ваших нужд. Встроенные реализации Prolog (например, Schelog) тоже могут помочь.
Комментарии:
1. Смысл схемы в том, что она более удобочитаема, чем код — я сразу вижу, что foo.bar не является необязательным и что оно должно быть целым числом от 3 до 9. С помощью специального средства проверки эта информация будет непонятна для не-Lispers.
Ответ №2:
У S-выражений на самом деле нет схем как таковых. Правильно сформированные S-выражения в чем-то, приближающемся к нормальному описанию грамматики, соответствуют (очень грубо):
atom := <character>
sexp := atom | '(' sexp* ')'
То есть S-exp представляет собой либо один атом, либо список из нуля или более S-выражений. Написание валидатора для этого не должно быть слишком сложным.
Комментарии:
1. Было бы хорошо, если бы тот, кто проголосовал против этого, мог оставить комментарий с указанием причины.
2. Вы выразили эквивалент того, что теги xml начинаются с < и заканчиваются> , что совсем не то же самое, что DTD для XML.
3. @AlexBrown Ну, у S-выражений нет схем. S-выражения в значительной степени представляют собой последовательность сбалансированных выражений, заключенных в скобки.