您的位置:首页 > 其它

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

2018-03-20 16:36 393 查看
编译原理
首先从总体上把握编译原理这门课程的目的。
编译程序——把一种语言程序(称为源语言程序)转换成另一种语言程序(目标语言程序),而后者与前者在逻辑上是等价的。
编译程序的工作过程一般可以划分为五个阶段:词法分析、语法分析、语义分析、中间代码的产生、优化、目标代码的生成。
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型文法,感觉很抽象,也很难理解,但是如果不深度考虑只是明白规则还是能行的,越顶端的东西越抽象,我会努力在这学期将这门课程学好,有什么不会的请教老师同学,不断提高自己。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: