2016-11-10 9 views
1

私はElixir用のjinja2のようなテンプレート言語を実装する初期設計段階にあります。私はレクサーを手作業で書く傾向がありましたが、最近Erlangのleexモジュールを訪れました。それは有望に見えますが、初期の研究の後には、それが私の目的にとって適切なツールであるかどうかわかりません。leexはテンプレートエンジンのレクサーを書くのに適していますか?

私の躊躇の1つは、基本的に文字列の埋め込み言語であるテンプレート言語ですが、leexを使用してこのケースでtokenizeを使用する方法は明確ではありません。簡単な例として、このテンプレートトークン化を想像:

    :この例では

    <p>Here is some text for inclusion in the template.</p> 
    {% for x in some_variable %} 
        The value for the variable: {{ x }}. 
    {% endfor %} 
    

    を、私はkewords「ため」と「」が異なっによってはトークン化されていることを確認する必要があります

  • 彼らは、タグ内にある場合:{%の%}それらがタグ内である場合
  • {{}}
  • テンプレートに含まれていて、タグ内にない場合。

私には、これをトークン化フェーズで2回実行するか、1回のパスでこれを行うために自分のレクサーを実行する必要があるようです。

字句解析、特にleex、またはテンプレートエンジンの作成経験がある方なら、最善の方法を理解することができますか?

答えて

3

これが役に立たない場合は事前にお詫びさせてください。しかし、字句解析は正規表現の力を持っていると思いますので、あなたがしようとしていることはスイートスポットではないと思いますREまたはLeexの最初のパスは、ソースコードから文脈要素(トークン)に移行することです。これはコンテキストがほとんどなく、Leexの適切な使用になります。

あなたのFORトークンとINトークンのさまざまな文脈依存セマンティクスの処理は、解析とErlangのYeccを使って処理されると思います。レキシカル分析フェーズではコメントを扱うことができるかもしれませんが、一般的にはLeexとYeccの組み合わせを使用すると思います。

+0

良い点は、トークン化段階ではなく解析段階に属します。説明をありがとう。私はあなたが正しいと思います。レクサーは、トークンのどれが意味するものか、それが何を意味するかには無関心でなければなりません。 – suprafly

関連する問題