首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析S-在LISP中具有任意分隔符的表达式

解析S-在LISP中具有任意分隔符的表达式
EN

Stack Overflow用户
提问于 2012-03-01 05:10:39
回答 2查看 459关注 0票数 3

(对于Lisp来说,我是个新手,不知道怎么做,但熟悉到一定有一种简单的方法。)

我对最近读到的一篇文章很感兴趣,这篇文章提倡将日志文件存储为Lisp样式的S-表达式,这样日志文件就可以很容易地转换成DSL。这让我想到了其他DSL的类似语法,但我遇到了麻烦。

解析s-用括号表示分隔符的表达式很容易。

代码语言:javascript
复制
"(my-function foo bar)"

可以从文件/流中读取并对其进行评估。

如果XML真的只是一个S表达式,那么难道不应该有一种简单的方法来转换一些简单的东西

代码语言:javascript
复制
<function>foo bar etc-1 etc-2</function>

转到

代码语言:javascript
复制
(function foo bar etc-1 etc-2)

我可以用字符串操作技术来伪造这种行为(见鬼,regex可以解决这个问题,真的)。但这似乎是李斯特的亵渎-这些只是S-表达!基于Lisp的lex/yacc版本也是如此--我可以看到需要更复杂的语法,但实际上,这只是以一种效率较低的方式伪装的Lisp语法。

理论上,这应该扩展到XML以外的任何上下文无关语法,这是Lisp语法的同态。(我知道Lisp的定义应该不是像S表达式那样简单的上下文无关语法,但显然后者是前者的严格子集,所以我的陈述仍然成立)。

简单地说,是否有一种简单的方法来定义与S-表达式同态的上下文无关语法(例如XML ),并在Lisp (或基于Lisp的DSL)中解析该语法?

EN

回答 2

Stack Overflow用户

发布于 2012-03-01 06:20:29

是的,您可以通过在lisp中实现"reader宏“来实现这一点,该宏将获取XML并将它们转换为S。一旦进入simple,在LISP世界中,一切都是简单的。

例:http://www.agentsheets.com/lisp/XMLisp/

票数 3
EN

Stack Overflow用户

发布于 2012-03-01 20:14:38

使用读取器宏解析XML可能是可能的,但我不知道有人这样做过。

S-XML是一个简单的XML解析器和构建器,但如果我记得它不使用读取器宏的话。

读取器宏没有被用来解决这个问题的部分原因是,尽管最初出现了真的很复杂,但XML实际上仍然是XML。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9510953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档