gpt4 book ai didi

没有正则表达式的解析模板?

转载 作者:行者123 更新时间:2023-12-02 05:39:49 24 4
gpt4 key购买 nike

好吧,这是我的问题:我有一个使用自定义 Javascript 实现的应用程序,但不支持正则表达式。

但是,我还是希望能够解析模板;最好使用 C++。

模板可能如下所示(ASP 样式模板):

<% var foo = someFunction("with a string");
var bar = anotherFunction(["with", "an", "array"]); %>

<b>This is html, and this is a variable: <%= bar %></b>

<% if(foo) { %>
<b> foo is 'true'</b>
<% } else { %>
<b> foo is 'false'. terrible. </b>
<% } %>

所以总体结构非常简单(我假设,相对可解析)。

我的问题是,是否可以使用 while() 循环解析这样的模板,遍历每个字符,而不是使用正则表达式?

既然我的尝试都失败了,那怎么办呢?

谢谢!

最佳答案

这样的模板很容易解析。

关键是认识到此类模板基本上由两种字符串的序列组成:样板 (HTML) 文本和脚本文本。

样板文本基本上以“%>”开始,以“<%”结束(在开始模板和结束模板处有特殊情况)。脚本文本就是一切。是的,对于每个监视“<%”、“%>”或“模板结束”的循环,您可以只用一个 while 循环来选择两者。该顺序隐含在来回交替中。这使得解析器非常简单:

  while not eof
boilerplate="";
while next_characters~="<%" or eof
boilerplate concat next_characters
end
scripttext="";
while next_characters~="%>" or eof
scripttext concat next_characters
end
end

(单字管理的细节留给coder)

你没有说的是你想对解析结果的。如果目标是从解析结果“生成输出”,则必须将其转换为程序。这实际上很容易。

基本上,您将结果写入文件并进行编译。对于每条收集到的样板文本,发出打印样板文本的打印语句;您可能必须对字符进行转义,以使其在您选择的目标语言的字符串文字中合法,或者将样板分成多个 block 以进行打印。对于每个脚本文本 block ,只需不变地发出它。您可能必须发出 prolog 文本 block 来制作函数头,并作为 poSTLog 文本 block 来制作函数结束。

就是这样。

[由于此类"template"与带有 print 语句的简单程序之间的简单转换,我认为此类模板编程不是很吸引人。它为我节省了一些打印关键字,仅此而已。]

关于没有正则表达式的解析模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11170717/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com