我正在研究SpiderMonkey内部。其documentation说:
编译器包括:随机逻辑而不是表驱动 词法扫描程序,一个产生AST的递归下降解析器,和 树行走代码生成器。
我不知道随机逻辑词法扫描器是什么以及树行走代码生成器是什么。我搜索了“随机逻辑词法扫描器”和“树行走代码生成器”,但没有得到任何看起来很有希望的东西。我可以获得指向这些概念的指针吗?
答案 0 :(得分:2)
我认为“随机逻辑词法扫描程序”的含义是词法扫描程序是手工(或多手)构建的,而不是使用基于正则表达式的表驱动词法扫描程序生成器,如{ {1}}。据推测,这个词是根据hacker lexicon使用的,可能是接受4(语无伦次,不优雅,杂乱无章)[“该程序有一组随机的错误特征”。 “这是该功能的随机名称。”]我将避免进一步的编辑评论。
树行走是代码生成中非常标准的工具,尽管从自动生成的树步行者构建的角度来看,很少有编译器是“纯粹的”,并且大多数严肃的编译器不止一次地在树上行走。虽然像Lua这样的简单语言可以在解析期间直接编译,但对于大多数语言,有必要首先构建一个抽象语法树(AST),然后在树上进行一次或多次遍历。 (注意:该短语中的“abstract”限定了单词“syntax”,而不是单词“tree”.ASTA非常具体。英语有时会令人讨厌。)
例如,查看LLVM文档中的许多树遍历示例。此外,ANTLR将自动生成树,并且已经尝试使用ANTLR自动化或系统化代码生成; AJ Admiraal的硕士论文"Automated ANTLR Tree walker Generation"就是一个例子(我没有读过,所以不能认可或批评),我之所以提到这只是因为它是谷歌搜索“树木行走”的大量热门歌曲中的第一个代码生成”。