第一章 引论

什么是编译器?

[广义]编译器就是一个程序,它可以阅读以某种语言编写的程序,并把它翻译成一个等价的、用另一种语言编写的程序。编译器的重要任务之一就是报告它在翻译过程中发现的源程序中的错误。
[狭义]把人类更容易理解和使用的高级语言转化为计算机能“理解”和运行的机器语言(或者较为接近的汇编语言)。

编译器的结构(1.2)

编译器由两个部分组成:分析(analysis)和综合(synthesis)。分析部分被称为编译器的前端(front end),综合部分被称为后端(back end)

  1. 分析部分:
    把源程序分解成多个组成要素,并在这些要素之上加上语法结构。然后使用这个结构来创建该源程序的一个中间表示。如果分析部分检查出源程序没有按照正确的语法构成,或者语义不一致,它就必须提供有效的信息,使得用户可以按此进行改正。
    分析部分还会收集有关源程序的信息,并把信息存在符号表(symbol table)中。符号表将会和中间表现形式一起传送给综合部分。
  2. 综合部分:根据中间表示和符号表中的信息来构造用户期待的目标程序。
  3. 分析部分包括词法分析(lexical analysis)、语法分析(syntactic analysis)和语义分析(contextual analysis)。
    词法分析:又称扫描(scanning),词法分析器读入组成源程序的字符流,并且将它们组织成有意义的词素(lexeme)的序列。对每个词素,分析器产生如下格式的词法单元:
    <token-name, attribute-value>
    语法分析:又称解析(parsing)。语法分析器用词法分析器生成的各个词法单元的第一个分量来创建树形的中间表示。树中的每个内部结点表示一个运算,该节点的子节点表示该运算的分量。
    语义分析:使用语法树和符号表中的信息来检查源程序是否和语言定义的语义一致。它同时收集类型信息,并把这些信息存放在语法树或符号表中。语义分析的一个重要部分是类型检查。
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值