解析和扩展Markdown

时间:2017-08-04 19:47:53

标签: parsing templates markdown

我目前正在尝试开发一个模板引擎,用于将自定义降价扩展为完整的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),我认为标记输入的过程是词法分析的一部分,但我不确定是否存在是一种常见的算法,用于破解代码,以便解析器执行最终的逻辑操作。

目前,我正在寻找研究方法的方向,而不一定是某人的实施(尽管这可能对研究有用)。

0 个答案:

没有答案