侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

go词法解析之scanner

2022-07-10 星期日 / 0 评论 / 0 点赞 / 45 阅读 / 2353 字

golang版本: 1.13.1 词法分析词法分析阶段是编译过程的第一个阶段。这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构词规则识别单词(也称单词符号

golang版本: 1.13.1 


词法分析

词法分析阶段是编译过程的第一个阶段。这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构词规则识别单词(也称单词符号或符号)。词法分析程序实现这个任务。词法分析程序可以使用lex等工具自动生成。

scanner

go于1.5开始实现了自举,而第一阶段的词法分析由cmd/compile/internal/syntax/scanner 实现的.

..scanner 的实现比较简单,主要逻辑在next里,是先解析是否是字符串,然后通过一个大的switch来转成tokens(tokens位于cmd/compile/internal/syntax/tokens),可以通过scanner的测试TestScanner来观察这一个过程。....
.

struct

...首先,我们先看一下scanner的结构体的一些定义.

scanner struct 的定义



.

测试结果:

=== RUN   TestScanner1 package1 name => syntax1 ;3 import3 literal => "fmt"3 ;5 func5 name => aaaa5 (5 )5 {6 name => a6 :=6 literal => 1236 ;7 name => fmt7 .7 name => Println7 (7 name => a7 )7 ;8 }8 ;--- PASS: TestScanner (0.00s)PASSDebugger finished with exit code 0

.

运行过程

...通过上面的测试文件可以知道,scanner的第一步是init数据,init只是一个简单的设置默认值,在这里就不多讲了....

主要过程是next的逻辑,scanner的执行通过next来驱动,一个next就是一个token,


词法解析是一个比较简单的过程,但是很繁琐,scanner+source 1000多行的代码里有一些特殊情况的解析,像文件名这些的处理

.

下一步: go语法分析之parser


.
.

广告 广告

评论区