编译器学习路线概述以及相关概念

目录

编译器: 通俗讲是高级语言翻译成机器语言的翻译器 

词法分析:  

语法分析  

语义分析,生成中间代码  

代码优化

生成目标程序  

概念描述

构造词法分析程序的例子  

用递归程序构造语法分析程序的例子

学习路径:

 学习资料:


编译器:

通俗讲是高级语言翻译成机器语言的翻译器 

高级语言:不依赖机器的语言 如C/C++ 

低级语言:依赖于机器,在机器上运行的语言  

编译过程:语法分析;语义分析;生成中间代码;代码优化 ;生成目标程序 ;

词法分析:  

    `任务`分析和识别单词(Token)  

    `解释`:源程序是由字符序列构成的,词法分析扫描源程序 (字符串),根据语言的词法规则识别单词,并以某种编码形式输出  

    ![Alt text](image.png)  

    `单词(Token):`是语言的基本语法单位,一般语言有四大类单词  

    1、语言定义的关键字或者保留字(如BEGIN、END、IF)  

    2、标识符  

    3、常数  

    4、分节符(运算符)(如+、-、*、/、;、(、)  

语法分析  

  `任务`:根据语法规则(即语言的文法),分析并识别出各种语法的成分,如表达式、各种说明、各种语句、过程、函数等  并进行语法正确性的检查  

  X1:=(2.0 + 0.8)* C1  

  赋值语句的文法:  

  <赋值语句>--><变量><赋值操作><表达式>  

  <变量>--><简单表示符>  

  <赋值操作>-->  

语义分析,生成中间代码  

  `任务`: 对识别出的各种语法成分进行语义分析,并产生相应的中间代码  

  中间代码:一种介于源语言和目标语言之间的语言形式  

  生成中间代码的目的:  

  1.便于优化处理  

  2.便于编译程序的移植  

  中间代码的形式【可以自己设计】:常用的有 三元式、四元式、逆波兰表示等  

  举例四元式:

  X1:=(2.0+0.8)*C1  

    四元式的语义  

 

代码优化

生成目标程序  


注意:

这几个步骤中间还贯穿着符号表管理和出错处理  

符号表管理:因为会一直查询需要有性能要求

遍的含义:从头到尾对代码扫描一遍,并做有关加工处理,生成新的源程序中间形式或者目标程序 

概念描述

前端:源程序  

后端:运行在目标机上的代码  

构造词法分析程序的例子  

文法:  

1.<标识符>::=字母|<标识符>字母|<标识符>数字  

2.<无符号整数>::=数字<无符号整数>数字  

3.<单字符分界符>::=:|+|*|,|(|)  

4.<双字符分界符>::=<冒号>=  

5.<冒号>::=:  

用递归程序构造语法分析程序的例子

语法树  

注意:

文法的两个条件  

为了不采用超前扫描的前提下实现不带回溯的自顶向下分析文法需要满足两个条件:  

1.文法是非递归的;  

2.对于G的每个非终结符A的任意两条规则A::a|B,下列条件成立:  

学习路径:

 学习资料:

当然也可以看一些开源编译器项目代码

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值