词法分析

介绍

在之前的文章中,了解了什么是语言处理器,具体见这里。接下来就是详细了解一下编译器的结构。

整体来看,一个编译器分为前端以及后端两个部分。

前端也就是分析部分,在这个阶段,编译器会将源程序分解成多个组成要素,然后在这些要素上加上语法结构,之后就会利用这个语法结构去创建程序的中间表示。

分析会对程序的语法,语义进行分析,如果存在不一致的情况,编译器就会返回相应的信息。与此同时,分析部分会搜集程序的一些信息,并且保存在符号表中。

在符号表中,源程序的标志符和它的声明或者使用信息绑定在一起,比如数据类型,作用域以及内存地址。

后端,也被称之为综合部分,后端接受到前端生成的中间形式以及符号表后,会根据这两者来构造目标程序。

首先来看,编译器的第一个步骤,词法分析。

词法分析

词法分析是编译器处理过程中的第一步。词法分析器会读取并扫描源程序的字符流,然后将他们组织成有意义的词序的序列。对于每个词素,词法分析器会产生一个 token(词法单元),形式如下:

​ <token-name, attribute-value>

token-name: 语法分析阶段所需要的抽象符号

attribute-name:指向符号表中保存这个 token 的记录的索引

假设有这样的一条语句

​ sum = a + f * 6.0

词法分析器会从左到右进行扫描,并得到下列 token

​ <id, 1> <=> <id, 2> <+> <id,3> <float, 3>

  • “sum” 会被映射为 <id, 1>,id 是 identifier (标志符) 的抽象表示, 1 表示 sum 在 符号表的中的条目。
  • “=” :<=>, 等号不需要属性,因此省略第二个分量
  • 其他的 token 映射规则和👆两个一样

经过处理获得的 token 流会传给下一个步骤进行处理,即语法分析。


词法分析
https://blog.zhangliangliang.cc/post/lexical-analysis.html
作者
Bobby Zhang
发布于
2020年1月16日
许可协议