编译原理期末复习考点总结(一) 通俗易懂的方式解释概念(纯手打)

编译原理总结

基础概念

  1. 编译程序是什么?
    能把源语言程序转换成目标语言程序的程序。

  2. 编译过程
    词法分析:
    扫描源程序,将其分解为词法单元后输出。
    方法:正规式,有限自动机。

    语法分析:
    根据语法规则,对词法单元进行推导或规约,识别出各类语法单元,最终判断输入串语法是否正确。
    方法:上下文无关文法。

    语义分析与中间代码生成:
    使用语法树和符号表对语法单元进行语义分析并把他们翻译成一定形式的中间代码。
    方法:等价变换。

    优化:
    对中间代码进行优化处理。

    目标代码生成:
    把中间代码翻译成目标程序。


  3. 对源程序或中间结果从头到尾扫描一次,并做加工处理,生成新的中间结果或目标程序的过程。

  4. 前端
    与源语言有关而与目标机器无关的部分。

  5. 后端
    与源语言无关而与目标机器有关的部分。

  6. 文法
    描述语言的语法结构的形式规则

  7. 语法树
    用来描述句型推导的一棵树

  8. 上下文无关文法
    所定义的语法单位与上下文(环境)无关。

    包括:
    终结符:
    直观的是语法树的叶子结点、句子中的单词或字。
    例如:He,give,a,b……

     非终结符:
     	语法树的分支结点、句子中的语法成分。
     	例如:<冠词>,A,B……
    
     开始符号:
     	语法树的根结点、句子。
     	例如:<句子>,S……
    
     产生式:
     	由一种高级的语法成分推出低级的若干语法成分的式子。
     	例如:<间接宾语> -> <冠词><名词>,S—>A|B……
    
  9. 语法定义语言
    从文法规则的开始符号出发,反复使用产生式,对非终结符进行替换或展开,最终得到的就是一种语言。

    通俗来说,一般的句子结构可以是“主语+谓语+宾语”,然后我们用产生式来替换,主语->代词—>He,谓语->动词->plays,宾语->名词->piano。这样我们就推出一句话。

    如果这样一直重复,就可以把这种语法规则可以表示的所有语句推导出来,即一种语言。

  10. 最左推导
    如果我们对于9中提到的产生式,每次推导都是先替换最左边的非终结符,那就是一种最左推导。

  11. 最右推导
    如果我们对于9中提到的产生式,每次推导都是先替换最右边的非终结符,那就是一种最左推导。

  12. 二义文法
    因为我们对于9中提到的产生式,可以通过最左推导和最右推导分别推导出一样的句子,所以这种文法就是二义文法。

    在程序设计语言中,只有确定化的代码才可以被机器按部就班执行,否则,每次机器运行结果就一定会不同。所以,程序设计语言的文法不可以是二义文法。

  13. 思考:为什么9中提到的文法会有二义性?
    因为9中的文法未规定替换的优先级和结合方式。

  14. 形式语言
    0型文法(短语文法)递归可枚举

    1型文法(上下文有关文法)

    2型文法(上下文无关文法)对应非确定的下推自动机

    3型文法(正规文法)

末尾彩蛋

加入知识星球,有什么相关问题,有更多大佬及时解答
在这里插入图片描述

在这里插入图片描述

  • 27
    点赞
  • 103
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值