1

私は、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 の経験がある人、またはテンプレート エンジンを作成した経験のある人が、今後の最善の方法についての洞察を提供できるかどうか疑問に思っています。

4

1 に答える 1

3

これが役に立たない場合は事前にお詫び申し上げますが、字句解析には正規表現の力があると考えています。そのため、あなたがやろうとしていることはREやLeexのスイートスポットにはないのではないかと思います. 最初のパスは、ソースコードからレキシカル要素 (トークン) に移行することです。これは、ほとんどコンテキストがなく、Leex の適切な使用法です。

FOR トークンと IN トークンの異なるコンテキスト依存のセマンティクスの処理は、解析と Erlang の Yecc を介して処理されると思います。字句解析フェーズでコメントを処理できる場合もありますが、一般的には、Leex と Yecc を組み合わせて使用​​する可能性があると思います。

于 2016-11-11T20:04:30.993 に答える