[编译原理] JavaScript 实现简易标记语言编译器
目标
目标:将一个简单语法的标记语言编译为 HTML
语言语法如下:
编译后:
编译产生数组经 Array.prototype.join() 即生成所需 HTML 代码

步骤
众所周知,一般的编译器在编译过程中都要经过 词法分析、语法分析(生成AST)、语义分析、生成目标代码、错误处理 等过程,但那是针对一般的编程语言,对于笔者这样简易的标记语言,完全可以省略多数步骤,仅保留 词法分析(分词)、语法分析、生成目标代码 三个步骤。
那么,在开始编码前,我们需要明确一下各阶段的输入和输出。
词法分析(分词)
输入(即原始文本):
输出:
语法分析
因为代码输出仍为一维数组,没有树状结构,所以不将其称为AST。
输入(与词法分析输出相同):
输出:
生成目标代码
输入(与语法分析输出相同):
输出(即最终代码):

具体实现
全局变量
词法分析
注:此阶段将单个词称作`term`(虽然函数名为tokenizer)
语法分析
核心代码如下:
完整代码:
目标代码生成

完整代码实现
感谢阅读。