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 的组合。
我正处于为 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 的组合。