编译原理高级语言及其语法描述

这篇博客介绍了编译原理中的高级语言概念,包括语言的语法和语义定义,字母表,单词符号,语法单位等。文章详细阐述了上下文无关文法,文法的二义性及其消除方法,并通过实例展示了最左推导、最右推导以及构造语法树的过程。此外,还讨论了课程学习的感受,强调了理解此类知识的挑战和重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、知识点

1.程序语言由语法和语义两方面定义。

2.语义:一组规则,使用它可以定义一个程序的意义。

3.语法:一组规则,用这组规则可以产生形式上正确的程序。

(1)字母表是一个有限的字符集,包括大小写英文字母、数字、特殊字符。

(2)单词符号是语言中具有独立意义的最基本结构,一般包括常数、标识符、基本字、算符和界符。

(3)语法单位是由单词符号构成的更大的结构,一般包括表达式、语句、分程序、函数、程序。

4.高级语言分类

(1)根据程序设计范式分类:强制式语言,应用式语言,基于规则的语言,面向对象的语言。

(2)编译时是否需要类型检查分类:静态类型语言和动态类型语言。

(3)根据类型检查强弱分类:弱类型语言和强类型语言。

5.一个数据类型包括以下三种要素:

(1)用于区别这种类型的数据对象的属性

(2)这种类型的数据对象可以具有的值

(3)可以作用于这种类型数据对象的操作

6.字母表:由若干元素组成的有限非空集合,用S表示,它的每个元素称为一个符号。

7.符号串: 由S中的符号所构成的有穷序列。

空字:不包含符号的序列称为空字,记为e。

8.上下文无关文法

文法是描述语言的语法结构的形式规则,上下文无关文法的特点,它定义的语法范畴完全独立于这种范畴可能出现的环境的。

特点:独立性    缺点:不能用来描述自然语言

9. 一个上下文无关文法G包括四个组成部分:一组终结符号,一组非终结符,一个开始符号,以及一组产生式。

(VT,VN,S,P)

10.语法分析树:简称语法树。用来表示推导过程。

(1)语法树的根结由开始符号所标记。

(2)随着推导的展开,当某个非终结符被它的某个候选式所替换时,这个非终结符的相应结就产生了下一代新结点。每个新结点和其父亲结点间都有一条连线。

(3)在一棵语法树生长过程中的任何时刻,所有那些没有后代的端末结自左至右排列起来就是一个句型

11.文法的二义性

如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义的。

也就是说,若一个文法存在某个句子,它有两个不同的最左(最右)推导,则这个文法是法是二义的。

12.文法二义性的几个问题

(1)文法二义不等于语言二义

(2)文法的二义性是不可判定的

(3)文法的二义性证明:找出一个句子,它有两个不同的最左推导或最右推导

(4)文法二义性的消除:给每个产生式定义优先级

  二、课后作业

6.(1)L(G6)是0,1,2,3,4,5,6,7,8,9

(2)最左推导:

N=>ND=>NDD=>NDDD=>0DDD=>01DD=>012D=>0127

N=>ND=>3D=>34

N=>ND=>NDD=>5DD=>56D=>568

最右推导:

N=>ND=>N7=>N27=>ND27=>N127=>D127=>0127

N=>ND=>N4=>D4=>34

N=>ND=>N8=>ND8=>N68=>D68=>568

7. N=>AB|B 
    A=>AC|D 
    B=>1|3|5|7|9 
    D=>B|2|4|6|8 
    C=>0|D

8.文法:

E=>T|E+T|E-T

T=>F|T*F|T/F

F=>(E)|i

最左推导:

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

E=>T=>T*F=>F*F=>F*(E)=>i*(E+T)=>i*(T+T)=>i*(F+T)=>i*(i+T)=>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

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

语法树:

 i+i+i :                   E                   i*(i+i):            E                                i-i-i:                  E   

                            / | \                                       /  |  \                                                    /   |   \ 

                          E  +  T                                   E  +   T                                                E    -    T                                                                     / | \     |                                    |     /  |  \                                           / | \        |  

                      E  +  T  F                                   T    T  *   F                                        E  - T       F

                      |       |   |                                    |     |        |                                        |      |        | 

                      T      F  i                                    F    F       i                                         T     F       i 

                      |       |                                        |     |                                                 |      |   

                      F       i                                       i      i                                                 F      i  

                      |                                                                                                         |

                      i                                                                                                         i

        

9.

S=>iSeS=>iSei=>iiSei=>iiiei

S=>iS=>iiSeS=>iiSei=>iiiei    

10.

S=>TS|T

T=>(S)|()

11.L1:

S=>AC

A=>aAb|ab

C=>cC|ε

L2:

S=>AB

A=>aA|ε

B=>bBc|bc

L3:

S=>AB

A=>aAb|ε

B=>aBb|ε

L4:

S=>A|B

A=>0A1|ε

B=>1B0=>A

   三、感悟

  习了编译原理第二章,知道了一些基础的定义、高级语言的一般特性,程序语言的语法描述,上下文无关文法及语法树。其实个人感觉这门课不简单,本身自己学习这类的课程就很难理解,入门比别人慢,但是还是会认认真真的学习,争取学习到一些东西,为将来就业工作积累基础。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值