《编译原理》 第二章 高级语言及其语法描述学习总结

     注:博客内容是先在Word文档中编辑后,粘贴过来的,语法树的连线和表示空字的希腊字符显示不出来。  

                                       编译原理学习总结

                                                    ——第二章 高级语言及其语法描述

一、 知识体系

(一)    程序语言的定义

1.  语法:是指一组规则,用它可以形成和产生一个合式的程序。一部分称为词法规则,另一部分称为语法规则。

(1)  词法规则:指单词符号的形成规则。

(2)  语法规则:指语法单位的形成规则。

2. 语义:指可以用来定义一个程序的意义的一组规则,这些规则称为语义规则。

(二)    高级语言的一般特性

1. 高级语言的分类

(1)  强制式语言;

(2)  应用式语言;

(3)  基于规则的语言;

(4)  面向对象的语言。

2. 程序结构

(1)  FORTRAN;

(2)  Pascal;

(3)  Ada;

(4)  Java;

3. 数据类型与操作

(1) 初等数据类型:数值数据、逻辑数据、字符数据、指针类型;

(2) 数据结构:数组、记录、字符串、表格、栈和队列;

(3) 抽象数据类型

4. 语句与控制结构

(1)  表达式;

(2)  语句(赋值句、控制语句、说明句、简单句和复杂句)。

(三)    程序语言的语法描述

1. 上下文无关文法

(1)文法:描述语言的语法结构的形式规则(即语法规则)。

(2)上下文无关文法:它定义的语法范畴(或语法单位)是完全独立于这个范畴可能出现的环境的。

(3)上下文无关文法由四部分组成:一组终结符号,一组非终结符号,一个开始符号,一组产生式。

(4)其他概念:句型、句子、语言、最左推导、最右推导。

2.语法分析树和二义性

(1) 语法树:表示了一个句型种种可能的(但未必是所有)不同推导过程,包括最左(最右)推导。

(2) 二义性:如果一个文法存在某个句子对应两个不同的语法树,或有两个不同的最左(最右)推导,则这个文法是二义的。

3. 形式语言

(1)0型文法:也称短语文法,左部和右部都既可含有终结符,也可含有非终结符,但左部至少含有一个非终结符。

(2)1型文法:也称上下文有关文法,在0型文法的基础上,左部长度必修小于等于右部长度(右部为空字除外)。

(3)2型文法:也称上下文无关文法,在0型文法的基础上,左部只可含非终结符,右部既可含终结符也可含非终结符。

(4)3型文法:也称正规文法,在0型文法的基础上,左部只含非终结符,右部只含终结符或既含终结符又含非终结符。若右部终结符在非终结符左侧,则称右线性文法;反之,则称左线性文法。

二、 课后习题

4.(1)1+1*2↑2*1↑2

      =2*2↑2*1↑2

      =4↑2↑2

      =16↑2

      =256

(2)1+1*2↑2*1↑2

      =1+1*4*1

      =2*4*1

      =8*1

          =8

   6.(1)N→D

        N→D1…DnN

        ∴L(G6)=Dn

(2)0127 最左推导:N=>DN=>0N=>0DN=>01N=>01DN=>012N=>012D=>0127

   最右推导:

N=>DN=>DDN=>DDDN=>DDDD=>DDD7=>DD27=>D127=>0127

   34 最左推导:

N=>DN=>3N=>3D=>34

     最右推导:

N=>DN=>DD=>D4=>34

   568 最左推导:

N=>DN=>5N=>5DN=>56N=>56D=>568

   最右推导:

N=>DN=>DDN=>DDD=>DD8=>D68=>568

   7.S→AB|AFEB

     A→+|-| 空字

     B→1|3|5|7|9(末位)

     C→2|4|6|8

     D→B|C|0

     E→ED|D| (中间位)

     F→B|C (首位)

   8.(1) i+i*i最左推导:

   E=>E+T=>T+T=>F+T=>i+T=>i+T*F=>i+F*F=>i+i*F=>i+i*i

     最右推导:

   E=>E+T=>E+T*F=>E+T*i=>E+F*i=>E+i*i=>T+i*i=>F+i*i=>i+i*i

     i*(i+i) 最左推导:

   E=>T=>T*F=>F*F=>i*F=>i*(E)=>i*(E+T)=>i*(F+T)=>i*(i+T)

        =>i*(i+F)=>i*(i+i)

     最右推导:

   E=>T=>T*F=>T*(E)=>T*(E+T)=>T*(E+F)=>T*(E+i)=>T*(T+i)

        =>T*(F+i)=>T*(i+i)=>F*(i+i)=>i*(i+i)

   (2)语法树:

   i+i+i

                                           代次

                  E(根)                   1

 

             E       +       T                 2

 

        E    +    T        F                3

       

        T         F         i                  4

 

        F         i                         5

 

        i                                   6

   i+i*i

                                           代次

                  E(根)                   1

 

             E       +       T                 2

 

             F        T   *      F         3

       

             i        F          i         4

 

                        i                   5

   i-i-i

                                           代次

                  E(根)                   1

 

             E       -       T                 2

 

        E    -    T        F                3

       

        T         F         i                  4

 

        F         i                         5

 

        i                                   6

9.

   ∵

   S=>iSeS=>iSeiS=>iSeiiSeS=>iSeiiSei=>iSeiiiei=>iieiiiei

   S=>iSeS=>iSeiSeS=>iSeiSei=>iSeiiSei=>iSeiiiei=>iieiiiei

   该文法存在iieiiiei右两个不同的最右推导

   ∴这个文法是二义的。

11.L1:

     S→EF

   E→aEb|空字

   F→Fc|空字

L2:

   S→EF

   F→bEc|空字

   E→Fa|空字

L3:

   S→EF

   E→aEb|空字

   F→aFb|空字

L4:

三、 感受

学习编译原理,虽然知道知道它的用途,但貌似感觉距离很遥远。刚刚开始学习,感觉概念性的知识很多,能理解但是很难记住,只看课本和课上听讲,虽然能理解大部分的内容,但是感觉好像每个知识点都是独立的,串不起来,到章节末进行了总结,列了知识体系,才把各部分关联起来。文法部分刚开始的时候有些地方理解不了,后来看了书做了题,就感觉没那么难了。每章总结对理解和巩固知识有很大的帮助。

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值