编译原理—第二章学习总结

编译原理

首先从总体上把握编译原理这门课程的目的。

编译程序——把一种语言程序(称为源语言程序)转换成另一种语言程序(目标语言程序),而后者与前者在逻辑上是等价的。

编译程序的工作过程一般可以划分为五个阶段:词法分析、语法分析、语义分析、中间代码的产生、优化、目标代码的生成。

1.词法分析

    输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个单词。

2.语法分析

    根据语言的语法规则,把单词符号串分解成各类语法单位。

3.语义分析

    分析其含义,并进行初步翻译。

4.中间代码产生

    进行静态语义检查,进行代码翻译。

5.优化

    公共字表达式的提取、循环优化、删除无用代码。

6.目标代码的产生

    把中间代码转化为最终的特定机器上的低级语言代码。

高级语言及其语法描述(重点讲-上下文无关文法)

    程序语言的定义{词法规则、语法规则}

    词法规则:单词符号的形成规则

    语法规则:从单次符号到更大的结构(语法结构)

文法:它描述语言语法结构的一组形式规则。

   上下文无关文法:它定义的语法范畴(或语法单位)是完全独立于这种范畴可能出现的环境。例如,在程序设计语言中,当碰到一个算术表达式时,我们完全可以“就事论事”处理,而不必考虑它所处的上下文。然而,在自然语言中,随便一个词,甚至一个字的意思在不同的上下文中都有可能有不同的意思。幸运的是,当今的程序设计语言都是上下文无关的。

  "→"表示箭头左边的由箭头右边的定义

  把He gave me a book与上述规则进行对照,看其中的语法范畴是否处于适当的位置,如果你了解英语的话,你应该可以确认这是一个正确的句子。做科学研究都有一个过程从现象得出一般结论,再用实验验证这个一般性结论。有了这个语法规则我们可以造出很多这种英文句子(简单假设,英文语法远比这复杂)。如果我们要造一个句子表达我们自己的意思,利用这个规则,很容易。

    

  根据上述规则,句子无需考虑上下文,就可以判断正确性(符合<主语><谓语><间接宾语><直接宾语>的规则)。

  其中,He,me等为终结符号,<主语>、<谓语>、<间接宾语>等为非终结符号。

  这个文法最终要定义<句子>语法结构,所以<句子>在这里称为开始符号;<谓语>→<动词>这种书写形式称之为产生式。

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

  说明一下:终结符号是组成语言不可再分的基本符号,在程序语言中就是保留字、标识符、常数等;非终结符号是一个给定的语法概念,是一个类(或集合)记号,而是不是某个个体记号;开始符号是一个特殊的非终结符号,是语言中我们最终想得到的字符串(在程序语言中,我们最终感兴趣的是“程序”这个语法范畴,其他的语法都是构造“程序”的基石);产生式(也称产生规则或者简称规则)是语法范畴的一种书写规则。 

  你想嘛,gave这个单词,拆分为一个个字母,就不再是gave了,没有什么特别的含义;而非终结符号就是诸如gave的动词的集合。

    额,有个细节好像忽略了,产生式的形式:

    A→α

    箭头左边是一个非终结符,称之为产生式的左部,箭头右边称之为右部。

    A是一个非终结符,α是由 非终结符号和终结符号的并集 的闭包 中的元素 组成的符号串

i型文法

1型文法:又称为上下文有关文法

(1):式子左边可以有多个字符,但必须有一个终结符

(2):式子右边可以有多个字符,可以是终结符,也可以是非终结符,但必须是有限个字符

2型文法:又称为上下文无关文法

(1):式子左边只能有一个字符,而且必须是非终结符

(2):式子右边可以有多个字符,可以是终结符,也可以是非终结符,但必须是有限个字符

3型文法:又称为正规文法(正规文法又包括左线性文法和右线性文法)

(1):式子左边只能有一个字符,而且必须是非终结符
(2):式子右边最多有二个字符,而且如果有二个字符必须是一个终结符和一个非终结符
如果只有一个字符,那么必须是终结符
(3):式子右边的格式一定要一致,也就是说如果有一个是(终结符+非终结符)那么所有的式子都必须是(终结符+非终结符)

  如果有一个是(非终结符+终结符),那么所有的式子都必须是(非终结符+终结符)

正规文法——左线性文法:

(1):必须是三型文法

(2):式子右边的产生是(非终结符+终结符)的格式

正规文法——右线型文法:

(1):必须是三型文法

(2):式子右边的产生式是(终结符+非终结符)的格式

学习感悟

    通过程序语言的语法描述(也是第二章的重点内容)的学习我了解到不仅仅是文法,这门课程是一门将具体问题抽象化的课程,包含着许多算法和算式。这种内容不在其本身的理论内容价值,而是为我们提供一个解决问题的严谨逻辑,从抽象方面来看待问题。比如一个句子是怎么来的,在上下文无关文法的学习中就有一个英语例句 he gave me a book ,从单词组成句子是按照一种什么语法规则,而计算机是通过什么规则识别每个单词的。比如,生成abb(n)(b的n次方)中间的b就不能省略为ab(n),因为这个b是定义的一种规则,是处于a和b(n)之间。这种一步一步解决问题的思路非常值得我学习,也是当代学生好高骛远、眼高手低的时代下,每个学生应该具备的基本能力。今天学习完了上下文无关文法以及后边的各种i型文法,感觉很抽象,也很难理解,但是如果不深度考虑只是明白规则还是能行的,越顶端的东西越抽象,我会努力在这学期将这门课程学好,有什么不会的请教老师同学,不断提高自己。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值