(我足夠多的新爲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