文章目录
写在前面
AST
如何生成AST
词法分析
揭开解析API的面纱
Scanner.Scan()
分析
写在后面
微信公众号: [double12gzh]
关注容器技术、关注
Kubernetes
。问题或建议,请公众号留言。
写在前面
本文基于GoLang 1.14
在语法层面对源代码进行分析,可以通过多种方式帮助你进行编码。为此,几乎总是先将文本转换成AST,以便在大多数语言中更容易处理。可能有些人知道,Go有一个强大的包go/parser,有了它,你可以比较容易地将源代码转换为AST。然而,我不禁对它的工作原理充满了好奇,我意识到只有开始阅读API的实现才能满足我的好奇心。
在本文中,我将通过阅读它的API实现,带大家了解它是如何转换的。
即使是对Go语言不熟悉的人,也建议可以看一下本文,因为这是一篇足够通用的文章,通读本文,您可以了解编程语言的分析方法。这篇文章也是了解编译器和解释器的第一步,同时也是深入研究静态分析的第一步。
AST
先说说阅读实现所需要的一些知识吧。什么是AST(Abstract Syntax Tree)?根据维基百科的介绍。
在计算机科学中,抽象语法树(AST),或者仅仅是语法树,是用编程语言编写的源代码的抽象语法结构的树状表示。树的每个节点都表示源代码中出现的一个构造。大多数编译器和解释器都使用AST作为源代码的内部表示,AST通常会省略语法树中的分号、换行字符、白空格、大括号、方括号和圆括号等。
用AST可以做什么?
• 源代码分析• 代码生成• 可改写
如何生成AST
纯文本对我们来说是很直接的,但从机器角度来看,应该是没有什么比这更难处理的了。因此,你必须先用一个词法分析器
对文本进行词法分析。一般的流程是把它传给一个解析器,然后检索AST。