私は主にScalaで書かれたアプリの式パーサーを書いています。ScalaでASTオブジェクトを作成しましたが、パーサーを作成する必要があります。Scalaに組み込まれているパーサーコンビネーターとANTLR3について聞いたことがありますが、どちらがより優れたパフォーマンスとコードの記述のしやすさを提供するのでしょうか。ここのところ:
ANTLRの長所
- よく知られている
- 速い
- 外部DSL
- ANTLRWorks(パーサー文法のデバッグ/テストに最適なIDE)
ANTLRの短所
- Javaベース(Scalaの相互運用は難しいかもしれませんが、経験はありますか?)
- 実行時に大きな依存関係が必要
パーサーコンビネーターの長所
- Scalaの一部
- ビルドステップが1つ少なくなります
- 実行時の依存関係は必要ありません。たとえば、Scalaのランタイムライブラリにすでに含まれています
パーサーコンビネーターの短所
- 内部DSL(実行が遅くなる可能性がありますか?)
- ANTLRWorksはありません(優れたパーサーテストおよび視覚化機能を提供します)
何かご意見は?
編集:この式パーサーは、代数/微積分式を解析します。ファイナライズされると、Android用アプリMagnificalcで使用されます。