为什么编译原理被称为龙书?,2024大厂Java知识点总结+面试题解析

这里你需要知道符号表(Symbol Table) 的概念:符号表是编译器使用和维护的数据结构,由标识符和类型组成。符号表的主要作用是帮助编译器快速定位。

下面是一个编译器的典型结构

下面我们就针对编译器结构的每一层进行描述和讨论

词法分析

词法分析(Lexical Analyzer)是编译器的第一个步骤,它也被称为 扫描(scanning)。词法分析器通过读入外部的字符流对其进行扫描,并且把它们组成有意义的词素(lexeme)序列,对于每个词素,词法分析器都会产生词法单元(token) 作为输出。这个词法单元会传递给下一个步骤,也就是语法分析。

这里需要解释一下 Token 、词素和词法分析器的概念

我们常用的编程语言就是具有词素的单词和符号的集合,比如 C 语言中有 (),-> 等等。关键字 if…while…,变量或函数名称以及数字和字符串常量也被视为词素。并不是所有的自负都属于词素,例如空格和注释就不属于。

词法分析器用来分析词素有两个规则

  • 跳过不能以字母开头的字符

  • 然后找到剩余的最长前缀,也就是词素

这两句话比较抽象,举个例子来说明一下

比如 C 语言中有这么一个语句

ifx = 20*30;

那么第一个词素就是 ifx,为什么不是 if 呢?因为 if 不是最长的前缀。然后后面的词素依次是 =,20,*,30和;。

词素、词法分析器、token 的关系如下

词素是 Token 的实例,词法分析器的主要任务就是从源程序中读取字符并产生 token。token 也是有结构的,一般结构如下

在词法分析生成的 token 中,第一个词 token-name 是语法分析期间使用的抽象符号,第二个词 attribute-value 指向的是符号表中关于这个词法单元的条目数。

我们举个例子来看一下词法分析的拆解过程。

比如现在源程序中有一个赋值语句

income = mainjob + sideline // 收入 = 主业 + 副业

这个赋值语句中的字符可以组合成如下词素,并转换成为 token,并传递给语法分析阶段。

  • 首先,income 是一个词素࿰

  • 16
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值