(私は 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)
文字列操作のテクニックを使って、この動作を偽造することができます (実際、正規表現でこれを処理できます)。しかし、それは Lisp への冒涜のように思えます - これらはただの S 式です! 同じことが、lex/yacc の Lisp ベースのバージョンにも当てはまります。より複雑な構文が必要であることは理解できますが、実際には、これは非効率的な方法で偽装された Lisp 構文にすぎません。
理論的には、これは XML を超えて、Lisp 文法の準同型である任意の文脈自由文法に拡張されるはずです。(Lisp はおそらく S 式のように単純な文脈自由文法では完全に定義されていないことを知っていますが、明らかに後者は前者の厳密なサブセットであるため、私の主張は依然として有効です)。
要するに、 S 式 (たとえば XML など) に準じた文脈自由文法の構文を定義し、Lisp (または Lisp ベースの DSL) 内でその文法を解析する簡単な方法はありますか?