为了理解源码结构,必须要进行语法分析,uglify在语法分析阶段得到一棵AST树(它的结构是数组嵌套数组,parse-js移植于一个Lisp的项目,获得的AST树类似Lisp里边的表,数组套数组:["toplevel", ["stat", [xxxx]]])
对于JS来说,一个文件就是处于一个全局域的语句块,uglify里边把这个命名为toplevel的语句块,里边涉及各种状态,太具体的状态就不画图了,上一个语句块的状态转移的图片,其他还是要阅读源码比较爽快。
为了理解源码结构,必须要进行语法分析,uglify在语法分析阶段得到一棵AST树(它的结构是数组嵌套数组,parse-js移植于一个Lisp的项目,获得的AST树类似Lisp里边的表,数组套数组:["toplevel", ["stat", [xxxx]]])
对于JS来说,一个文件就是处于一个全局域的语句块,uglify里边把这个命名为toplevel的语句块,里边涉及各种状态,太具体的状态就不画图了,上一个语句块的状态转移的图片,其他还是要阅读源码比较爽快。
我们先看一下在zend_language_parser.y里边是如何书写赋值语句的语法规则(在没有任何说明的情况下,本文讨论的仅仅是:$var = 1;这样一条简单的赋值语法规则)。