我正处于为 Elixir 实现类似 jinja2 的模板语言的初始设计阶段。我一直倾向于手动编写词法分析器,但最近我遇到了 Erlang 的 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 %}
在此示例中,我需要确保关键字 ' for ' 和 ' in ' 的标记不同,具体取决于:
- 如果它们在标签内:{% %}
- 如果它们在标签内:{{}}
- 如果它们在模板中,但不在任何标签内。
对我来说,这看起来我需要在标记化阶段进行两次传递,或者滚动我自己的词法分析器以便一次完成。
我想知道是否有任何有词法分析经验的人,尤其是 leex,或编写模板引擎可以提供一些关于最佳前进方式的见解?