私が書いている Web アプリケーション用の単純なテキスト テンプレート言語を書いています (Google の ctemplate を考えてください)。完了すると、「評価して実行する」、「評価して印刷する」、「html を評価してエスケープする」、「コメントする」など、少数の可能なアクションのみを取り上げます。パーサー全体をゼロから手書きすることを考えていましたが、lex、flex、antlr などのパーサー ジェネレーターを調べ始めました。これらは、私の単純な構文に必要以上のもののようです。問題は、どの時点でパーサー ジェネレーターを使用するのが実用的かということです。
2 に答える
すぐにでも。単純な構文があれば、パーサー ジェネレーターを使用するのは簡単です。変数とループと条件を追加したい場合は、さらに簡単になります。
ちょっと待って!- 独自の言語を発明する理由はほとんどありませんが、それが非常にドメインに特化eqn
やTeX
分子モデリング言語である場合を除きます。その目的のために特別に設計された言語を組み込む方がはるかに優れています。その分野ではTclが古参であり、 Pythonは有力な候補です。Perl も組み込みスクリプト言語として設計されましたが、ユーザーの手に非常に「書き込み専用」のコードが生成される可能性が高いため、候補としては不適切だと思います。
言語設計は難しく、厄介な部分をすべて吸い出すことはさらに困難です。Python と Tcl の両方を使用して、コア言語のどの程度をユーザーに公開するかを決定し、それらの必要性を見つけたときにクローズド ビットを開くことができます。
私が最初に書いた小さな言語 (驚くべきことに、今でもプロダクションで使用されています) は、Tcl が代わりに使用されていれば、はるかに優れていたでしょう。
一方では、これらのツールのいずれかを使用した経験がなく、時間がある場合は、このユース ケースのツールを学ぶ良い機会になるでしょう。これらのツールの経験があれば、多くの人が多くの解析タスクで正規表現を取得するのと同じように、単純にそれらを使用することになると思います。
一方、単純なパーサーは実行するのがそれほど難しくなく、維持するのもそれほど難しくありません。私はそれらを書くのが好きで、通常、タスクがツールではなくツールを必要とするときに手を差し伸べます (しかし、私はツールにあまり精通していません)。多くの場合、タスクによっては、正規表現よりも単純なパーサーを好みます。