我目前正在尝试开发一个模板引擎,用于将自定义降价扩展为完整的HTML。
我最初认为递归方法可能有用。这将使用标记栈来确定您是否在另一个标记内,并在每个标记关闭时评估每个标记的逻辑。我没有想到一遍又一次不使用indexOf的方法,而且涵盖了我想要支持的所有自定义指令。
从语法上讲,它为每个指令使用open和closing标记。例如:
@foreach(item in list)
<p>text</p>
@endforeach
制作:
<p>text</p>
<p>text</p>
<p>text</p>
(如果列表中有3个项目)
@foreach(item in list)
<p>textA</p>
@endforeach
@foreach(item in list)
<p>textB</p>
@endforeach
制作:
<p>textA</p>
<p>textA</p>
<p>textA</p>
<p>textA</p>
<p>textB</p>
<p>textB</p>
(如果每个列表中有3个项目)
@foreach(item in list)
@foreach(item in list)
<p>text_inside</p>
@endforeach
<p>text_outside</p>
@endforeach
产地:
<p>text_inside</p>
<p>text_inside</p>
<p>text_inside</p>
<p>text_outside</p>
<p>text_inside</p>
<p>text_inside</p>
<p>text_inside</p>
<p>text_outside</p>
<p>text_inside</p>
<p>text_inside</p>
<p>text_inside</p>
<p>text_outside</p>
最初,我正在考虑一种递归方法,它会使用堆栈来知道它是在其他标签内部还是外部。我突然意识到这是编译器的常用功能,因此应该有一些流行的解析/编译算法。
我遇到了编译器使用的过程(Scanner - &gt; Lexer - &gt; Parser),我认为标记输入的过程是词法分析的一部分,但我不确定是否存在是一种常见的算法,用于破解代码,以便解析器执行最终的逻辑操作。
目前,我正在寻找研究方法的方向,而不一定是某人的实施(尽管这可能对研究有用)。