Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Erlang leex是编写模板引擎lexer的好选择吗?_Erlang_Elixir_Template Engine_Lexical Analysis_Leex - Fatal编程技术网

Erlang leex是编写模板引擎lexer的好选择吗?

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

我正处于为Elixir实现类似于jinja2的模板语言的初始设计阶段。我一直倾向于手工编写lexer,但最近我遇到了Erlang的leex模块。它看起来很有希望,但经过一些初步研究,我不确定它是否适合我的目的

我犹豫不决的一点是,模板语言本质上是一种嵌入字符串的语言,不清楚如何使用leex在这种情况下使用tokenize。作为一个简单的示例,想象一下将此模板标记化:

<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”根据以下情况进行不同的标记:

  • 如果它们位于标记内:{%%}
  • 如果它们在标记中:{{}
  • 如果它们在模板中,但不在任何标记中
对我来说,这看起来像是我需要在标记化阶段完成两个过程,或者滚动我自己的lexer,以便在一个过程中完成这项工作


我想知道,有词汇分析经验的人,尤其是leex或编写模板引擎的人,是否能提供一些关于最佳前进方向的见解?

如果这没有帮助,请允许我提前道歉,但我认为词汇分析具有正则表达式的功能,因此,我怀疑你想做的事情不是在RE's或Leex的最佳位置。第一步是从源代码转到词法元素(标记),这些元素大多没有上下文,是Leex的适当用法


我认为FOR和IN标记的不同上下文敏感语义的处理将通过解析和Erlang的Yecc来处理。您可能能够在词法分析阶段处理注释,但我认为通常您可能会使用Leex和Yecc的组合。

这是一个很好的观点,它属于解析阶段,而不是标记化阶段。感谢您的澄清;我想你是对的。lexer应该不知道任何标记的含义或代表什么。