我正在为Elixir实现类似jinja2的模板语言的初始设计阶段。我一直倾向于手动编写词法分析器,但最近我遇到了Erlang的leex模块。它看起来很有前途,但经过一些最初的研究后,我不确定它是否适合我的目的。leex是编写模板引擎词法分析器的好选择吗?
我的一个犹豫是一种模板语言,实质上是一种字符串嵌入式语言,但不清楚如何使用leex在这种情况下使用标记化。作为一个简单的例子,假设令牌化这个模板:
<p>Here is some text for inclusion in the template.</p>
{% for x in some_variable %}
The value for the variable: {{ x }}.
{% endfor %}
在这个例子中,我需要确保kewords“为”和“在”的切分不同,这取决于:
- 如果他们是一个标签中:{%}
- 如果他们是一个标签中:{{}}
- 如果它们在模板中,但不在任何标签内。
对我来说,这看起来好像我需要在令牌化阶段做两遍,或者滚动我自己的词法分析器,以便一次完成。
我想知道是否任何有词法分析经验的人,特别是leex或者写模板引擎能够提供一些洞察最好的前进方向?
好点,属于解析阶段而不是标记化阶段。感谢您的澄清;我认为你是对的。词法分析器不应该知道任何标记的含义或代表。 – suprafly