leex 是编写模板引擎词法分析器的好选择吗?

Is leex a good choice for writing a template engine lexer?

我正处于为 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)或编写模板引擎的人可以提供一些关于最佳前进方向的见解?

如果这没有帮助,请让我提前道歉,但我认为词法分析具有正则表达式的强大功能,因此,我怀疑您正在尝试做的事情并不甜蜜- RE 或 Leex 的现货。第一步是从源代码到词汇元素(标记),这主要是没有上下文的,并且是对 Leex 的适当使用。

我认为可以通过解析和 Erlang 的 Yecc 来处理 FOR 和 IN 标记的不同的、上下文相关的语义。你可能会在词法分析阶段处理注释,但我认为一般你可能会使用 Leex 和 Yecc 的组合。