(我足够多的新为Lisp不知道如何做到这一点,但也足够熟悉知道那里只是必须是一个简单的方法。)解析S-表达与LISP任意分隔符
我我最近阅读的一篇文章感兴趣,它主张将日志文件存储为Lisp风格的S表达式,以便日志文件可以轻松转换为DSL。这让我想到了其他DSL的类似语法,但我碰到了一个问题。
解析s表达式,其中定界符是括号容易
"(my-function foo bar)"
可以从文件/流被读取和平凡评价。
如果XML是真的只是一个S-表达,不应该有转变为
<function>foo bar etc-1 etc-2</function>
简单的东西到
(function foo bar etc-1 etc-2)
我可以伪造这种行为有一个简单的方法字符串操作技术(heck,真正的正则表达式可以处理这个问题)。但是,这看起来像Lisp亵渎 - 这些只是S表达!这同样适用于lex/yacc的基于Lisp的版本 - 我可以看到需要更复杂的语法,但实际上,这只是以较低效率的方式伪装的Lisp语法。
理论上,这应该超越XML,扩展到任何与Lisp语法同态的上下文无关文法。 (我知道Lisp并没有被上下文无关的语法完全定义为与S表达式一样简单,但显然后者是前者的严格子集,所以我的陈述仍然存在)。
因此,简而言之:有没有一种简单的方法来定义一个上下文无关文法同态到S-表达式(如XML,例如)的语法和解析内Lisp的是语法(或Lisp的基础DSL)?
是什么问题? – 2012-03-01 05:15:11
我认为这是暗示的,但也许不清楚,因为我没有把它作为一个问题来描述。编辑澄清它(最后)。 – chimeracoder 2012-03-01 05:24:58