Lisp S-表达式的良好形式/模式

Lisp S-表达式的良好形式/模式,lisp,schema,Lisp,Schema,我正在寻找检查S表达式良好形式/模式的工具 你知道这些工具吗 正如Paul Nathan所指出的,我正在寻找的是一个sexp的模式验证器 S表达式实际上没有模式。在接近正常语法描述的事物中,格式良好的S表达式符合(非常粗略): atom:=+ sexp:=原子|'('sexp*')' 也就是说,S-exp要么是单个原子,要么是零个或多个S-expression的列表。为此编写验证程序应该不会太难。我怀疑OP的问题是用S表达式和Lisp替换XML技术堆栈 使用S表达式的惯用方法是实现专门针对特定

我正在寻找检查S表达式良好形式/模式的工具

你知道这些工具吗


正如Paul Nathan所指出的,我正在寻找的是一个sexp的模式验证器

S表达式实际上没有模式。在接近正常语法描述的事物中,格式良好的S表达式符合(非常粗略):

atom:=+
sexp:=原子|'('sexp*')'

也就是说,S-exp要么是单个原子,要么是零个或多个S-expression的列表。为此编写验证程序应该不会太难。

我怀疑OP的问题是用S表达式和Lisp替换XML技术堆栈

使用S表达式的惯用方法是实现专门针对特定数据格式定制的特殊验证器和转换器。由于Lisp几乎是声明性的(并且允许在其上定义无数可能的声明性语言),因此不需要像XML模式或DTD这样的专门的通用解决方案


根据您使用的Lisp风格,您可以选择适合您需要的模式匹配库。嵌入式Prolog实现(如Schelog)也有帮助。

这有点令人惊讶,因为没有任何模式可以对基于sexp的数据表示进行检查。我几年前编写的一个工具检查了parens的平衡性,这正是您所需要的。如果您是从XML模式的角度考虑问题,那么重点是什么?语法非常简单。@Paul:你说的是sexp的具体语法,而我说的是以sexp为代表的“语言”的抽象语法。假设我在S-expr的基础上定义了一种新的格式,并用专用的“关键字”标记:我如何确保实际的S-expr尊重这种格式?您将语法和语义混为一谈。在语法上,它是通过解析器检查的,即上下文无关语法。一个结构良好的性别歧视是可以容忍的。关于关键词的问题是语义;您似乎正在寻找sexpr模式和验证器。我还没有遇到过。我认为人们通常会走在性爱树上并使用它;如果它是正确的,那就是直觉,如果它是错误的,那它就会引发一个条件。循环宏就是一个应用于代码的例子。如果投票反对的人可以留下一条注释来说明原因,那就好了。你表达的意思相当于说xml标记以<开头,以>,这与DTD对xml的作用完全不同。@AlexBrown哦,S表达式没有模式。S表达式几乎是一个平衡括号表达式序列。模式的要点是它比代码更可读-我可以马上看出,它不是可选的,它必须是一个介于3和9之间的整数。使用特设验证器,非口齿不清者将无法理解此信息。
atom := <character>+
sexp := atom | '(' sexp* ')'