Erlang leex是编写模板引擎lexer的好选择吗?
我正处于为Elixir实现类似于jinja2的模板语言的初始设计阶段。我一直倾向于手工编写lexer,但最近我遇到了Erlang的leex模块。它看起来很有希望,但经过一些初步研究,我不确定它是否适合我的目的 我犹豫不决的一点是,模板语言本质上是一种嵌入字符串的语言,不清楚如何使用leex在这种情况下使用tokenize。作为一个简单的示例,想象一下将此模板标记化:Erlang leex是编写模板引擎lexer的好选择吗?,erlang,elixir,template-engine,lexical-analysis,leex,Erlang,Elixir,Template Engine,Lexical Analysis,Leex,我正处于为Elixir实现类似于jinja2的模板语言的初始设计阶段。我一直倾向于手工编写lexer,但最近我遇到了Erlang的leex模块。它看起来很有希望,但经过一些初步研究,我不确定它是否适合我的目的 我犹豫不决的一点是,模板语言本质上是一种嵌入字符串的语言,不清楚如何使用leex在这种情况下使用tokenize。作为一个简单的示例,想象一下将此模板标记化: <p>Here is some text for inclusion in the template.</p&g
<p>Here is some text for inclusion in the template.</p>
{% for x in some_variable %}
The value for the variable: {{ x }}.
{% endfor %}
以下是一些要包含在模板中的文本
{%x在某个_变量%}
变量的值:{{x}。
{%endfor%}
在本例中,我需要确保单词“for”和“In”根据以下情况进行不同的标记:
- 如果它们位于标记内:{%%}
- 如果它们在标记中:{{}
- 如果它们在模板中,但不在任何标记中
我想知道,有词汇分析经验的人,尤其是leex或编写模板引擎的人,是否能提供一些关于最佳前进方向的见解?如果这没有帮助,请允许我提前道歉,但我认为词汇分析具有正则表达式的功能,因此,我怀疑你想做的事情不是在RE's或Leex的最佳位置。第一步是从源代码转到词法元素(标记),这些元素大多没有上下文,是Leex的适当用法
我认为FOR和IN标记的不同上下文敏感语义的处理将通过解析和Erlang的Yecc来处理。您可能能够在词法分析阶段处理注释,但我认为通常您可能会使用Leex和Yecc的组合。这是一个很好的观点,它属于解析阶段,而不是标记化阶段。感谢您的澄清;我想你是对的。lexer应该不知道任何标记的含义或代表什么。