「regexenでXを行う方法」についての投稿が1日にたくさんあります。そして、それらのほとんどに対する最良の反応は、正直なところ、「なぜハンマーでネジを動かそうとしているのか」ということのようです。しかし、regexenはいたるところにあり、構文はほとんど移植可能です。特に、派手な部分から遠ざける場合はそうです。
regexenに相当するものはありますが、パワーと構成可能性の次のレベルにありますか?いくつかの種類の「どこでも使用できます」解析ライブラリ、できればそのインターフェイスとして見事に簡潔なDSLを使用しますか?
私はRagelをいくらか使用しましたが、前処理ステップのため、「毛むくじゃらの正規表現の代わりにこれを使用する」として誰かに勧めることを躊躇します。Obj-Cから使用するのは厄介であり、標準の操作手順の一部としてcompile-link-runがない言語ではひどく厄介になると思います。
私が探しているのは、「インライン-オンライン-ユニバーサル」テストに合格するものです。
(インライン)正規表現の場合と同様に、他のコードとインラインで表記を記述できます。
(オンライン)結果のパーサーは、他のコードと同じように実行できます。つまり、Pythonのようなものの場合、REPLに入力した直後に実行できます。
(ユニバーサル)別の言語/プラットフォームに移動して、パーサーに実質的に同じコードを使用することができます。方言の違いを法として。実際には、Python、Ruby、C、Java、Haskellで動作するものに満足しています。
私が知っているほとんどのツールは「オンライン」に分類されます。文法をオフラインで前処理し、ターゲット言語(C、Python、Java、C ++…)でコードを吐き出します。これらはスタンドアロンツールであり、それ自体は言語環境に統合されていません。
PEGパーサーとlex/yaccコンボの提案がありました。パーサーコンビネーターライブラリも適している可能性があります。あなたが提案するかもしれないものは何でも、私はそれがこれらのテストを満たしていることを実証してもらいたいです。あなたの答えは、Python、C、Haskellで動作するデモパーサーを提供することにより、提案されたソリューションがインラインオンラインユニバーサル要件を満たしていることを実証する必要があります。デモの例は作成者次第ですが、regexenだけを使用すると苦痛になりますが、適切なパーサーを使用すると簡単です。