如何开发语言语法检查器?

时间:2015-12-13 20:29:20

标签: token abstract-syntax-tree lexical-analysis

我想为我的web项目开发语法检查工具。目的是分析ECMAScript 6语法。

我知道,有一些像BabelJs这样的工具,其中存在这样的工具(但是在NodeJs环境中开发),但我想尝试制作这样的工具,因为获得了新的知识。

我开始读什么喊,哪些书籍和文章? 我将突出我想要的,我不想编译器/解释器,我只想要一个语法检查器。

1 个答案:

答案 0 :(得分:0)

你需要:

  • 以难以理解的细节了解ECMAScript 6规范;
  • 建立词法分析器
  • 构建解析器

你需要从理论的良好来源中学习经典的lexing和解析。有了这个背景,您可以考虑为ECMAScript 6构建词法分析器和解析器,这就是基本语法检查。

请参阅https://en.wikipedia.org/wiki/Parsing,尤其是参考资料。理想的是Aho / Ullman / Sethi关于编译的书。

不要指望这很容易(大多数解析器 - 新手都会犯这个错误);解析实际上是一个非常复杂的主题。期望花费大量精力学习如何正确地做到这一点。如果要检查语法和抱怨,您还需要学习如何在解析器中构建语法错误恢复;这样做的技巧没有得到很好的记录/教导。

大声提示:如果使用词法分析器生成器和解析器生成器工具,构建词法分析器和解析器会容易得多。您仍然需要编译器基础知识来理解它们的作用。

这是lexer(“正则表达式”)列表和可供选择的解析器生成器:http://en.wikipedia.org/wiki/Comparison_of_parser_generators

JavaScript具有一些功能(“分号插入”),这使得大多数传统方法难以解析。所以你需要做的是学习理论以正确理解基础知识,然后学习如何弯曲解析器来处理像JavaScript这样的奇怪案例。

您还需要使用特殊的解析器来从构成“Web项目”的HTML页面中提取JavaScript。