правильная форма / схема S-выражений

#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-выражения в значительной степени представляют собой последовательность сбалансированных выражений, заключенных в скобки.