私は、Elixir 用の jinja2 のようなテンプレート言語を実装する最初の設計段階にいます。私は字句解析器を手作業で書きたいと思っていましたが、最近、Erlang の leex モジュールに出会いました。有望に見えますが、最初の調査の後、それが私の目的に適したツールであるかどうかはわかりません.
私の躊躇の 1 つは、基本的に文字列埋め込み言語であるテンプレート言語です。この場合、leex を使用してトークン化を使用する方法が明確ではありません。些細な例として、このテンプレートをトークン化することを想像してください:
<p>Here is some text for inclusion in the template.</p>
{% for x in some_variable %}
The value for the variable: {{ x }}.
{% endfor %}
この例では、キーワード ' for ' と ' in ' が以下に応じて異なる方法でトークン化されるようにする必要があります。
- タグ内にある場合: {% %}
- タグ内にある場合: {{ }}
- それらがテンプレート内にあるが、どのタグ内にもない場合。
私には、トークン化フェーズで 2 つのパスを実行するか、1 つのパスでこれを行うために独自のレクサーをロールする必要があるように見えます。
字句解析、特に leex の経験がある人、またはテンプレート エンジンを作成した経験のある人が、今後の最善の方法についての洞察を提供できるかどうか疑問に思っています。