程序设计语言编译原理

一,引言

    翻译程序:它是一个程序,能把一种语言程序转换成另外一种语言程序,且二者在逻辑上是等价的。这两种语言分别称为源语言目标语言

    编译程序:一种翻译程序,它的源语言是“高级语言”(C,Java,Pascal),目标语言是“低级语言”(汇编语言,机器语言)。

    编译前端:与源语言有关,与目标机无关;编译后端:与源语言无关,与目标机有关。

二,高级语言及其语法描述

    2.1,程序语言的定义

        2.1.1,语法

            任何语言程序都可以看成是一定字符集(称为字母表)上的一字符串(有限序列)。主要由语法和语义两个方面定义。

            (1)词法规则:单词符号的形成规则。也就是规定了字母表组成的那些字符串是一个单词符号。

                【注】:单词符号:常数、标识符、基本字、算符和界符(正规式和有限自动机理论)

            (2)语法规则:是语法单位的形成规则。也就是规定了如何从单词符号形成更大的语法单位。

                【注】:语法单位:表达式、语句、分程序、函数、过程和程序(上下文无关文法)

           2.1.2语义

                    语义:可以定义程序意义的规则。这些规则称为语义规则。

    2.2高级语言的一般特性

          2.2.1高级语言的分类

1、强制性语言,也称过程式语言,命令驱动,面向语句。如FORTRAN、C、Pascal、Ada

2、应用式语言,从已有的函数出发构造出更复杂的函数。如LISP和ML。

3、基于规则的语言,检查一定的条件,当它满足值,则执行适当的动作。如Prolog。

4、面向对象语言,主要特性是支持封装性、继承性和多态性。如Java, C++

四,语法分析

    4.1语法分析器的功能

        语法的语法结构用上下文无关文法描述;

        语法分析器是按文法的产生式,识别输入的符号串是否为一个句子;

        文法的句子:看是否从文法开始符号推导出该串,或根据该文法可以建立一颗与该串匹配的语法分析树。

        语法分析方法有两种:自上而下分析法和自下而上分析法;

4.2自上而下分析面临的问题

    主旨:对一个输入串,从文法的开始符号(树根)出发,采用一切可能的办法,从上而下的为输入串建立一颗语法树;

    本质上:试探性的过程

    左递归: 分为直接左递归和间接左递归, 即文法存在非终结符 P,使得 P => Pα。左递归会使自上而下分析无限循环

  回溯:浪费分析时间,不成功时难于知道出错位置

  解决办法:取消左递归和取消回溯

4.3.1左递归的消除

 

   一般定义: 

   P -> Pα1|Pα2|…|Pαm |β1 |β2|…|βn,其中每个α均不等于ε,每个β不以P开头,则:P ->β1P’|β2P’|…|βnP’

   P’->α1P’|α2P’|…|αmP’|ε

   例如:S->Sc|Sabc|abc|bc|c取消左递归,S->abcS'|bcS'|cS',S'->cS'|abcS'|ε

消除文法中一切左递归的方法:

步骤:①将文法中所有非终结符按某一顺序排列P1、P2…Pn
     ②变为直接左递归(即,对于Pi,若存在Pj,j < i,且有产生式Pi->Pjr, Pj->δ1|δ2 |…|δk,则改写Pi的产生式为Pi-        >δ1r|δ2r|…|δkr),再消除直接左递归

     ③化简② 所得的产生式,即从开始符号出发永远无法到达的非终结符的产生规则。

4.3.2 消除回溯,提公因子

    消除回溯须保证:(1) 对文法的非终结符匹配输入串时,能根据所面临的输入符号准确地指派一个候选产生式。

                    (2) 若候选获得成功匹配,则这种匹配不会是虚假的;若此候选无法完成任务,则其他候选也肯定无法完                          成。

    引入文法有关的函数: FIRST (α)={a | α => a…, a属于 VT} ,即α的所有可能推导的开头终结符

    FIRST集合计算方法:
      (1) 若X->a.., 则将终结符 a 加入FIRST(X)中
      (2) 若X->ε,则将  加入FIRST(X)中

      (3) 若X->Y…,且Y属于非终结符,则将  FIRST(Y)\{}加入到FIRST(X)中

      (4) 若X->Y1Y2..YK,且Y1,Y2,..Yi-1都是非终结符,且Y1,Y2,..Yi-1的FIRST集合中均包含ε,则将FIRST(Yj) ,(                   j=1,2,..i) 的所有非元素加入到FIRST(X)中.特别地,若Y1~YK均有ε产生式,则将ε加到FIRST(X)中。

   提取公因子:有左因子的文法     A ->αβ1 | αβ2  等价于A->α(β1|β2) 提左因子:A->αA' A'->β1|β2

4.3.3LL(1)分析条件

    一个文法:不含左递归,每个非终结符的所有候选首符集两两不相交

    引入文法有关的函数:S为文法G开始符号,对于非终结符A  
                         FOLLOW(A)={ a  |S ...Aa...,a VT , A VN },特别的,若S ...A,则#  FOLLOW(A)

                         即句型中紧接A之后的终结符或#

    FOLLOW集合计算方法

        (1)对文法开始符号S, 置#于FOLLOW(S)中

        (2)若有AB,则将FIRST() \{}加入FOLLOW(B)中。 (此处 可以为空)

        (3) 若A B 或A B ,且  * (即 属于FIRST()),则将 FOLLOW(A)加入FOLLOW(B)中(此处 可以为                 空)。

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
编译原理经典教材 目录 第一章引论 1.1什么叫编译程序 1.2编译过程概述 1.3编译程序的结构 1.3.1编译程序总框 1.3.2表格与表格管理 1.3.3出错处理 1.3.4遍 1.3.5编译前端与后端 1.4编译程序与程序设计环境 1.5编译程序的生成 第二章高级语言及其语法描述 2.1 程序语言的定义 2.1.1语法 2.1.2 语义 2.2 高级语言的一般特性 2.2.1 高级语言的分类 2.2.2程序结构 2.2.3数据类型与操作 2.2.4语句与控制结构 2.3程序语言的语法描述 2.3 上下文无关文法 2.3.2语法分析树与二义性 2.3.3 形式语言鸟瞰 练 习 第三章词法分析 3.1 对于词法分析器的要求 3.1.1词法分析器的功能和输出形式 3.1.2词法分析器作为一个独立子程序 3.2词法分析器的设计 3.2.1输入、预处理 3.2.2 单词符号的识别:超前搜索 3.2.3状态转换图 3.2.4状态转换图的实现 3.3正规表达式与有限自动机 3.3.1正规式与正规集 3.3.2确定有限自动机(DFA) 3.3.3非确定有限自动机(NFA) 3.3.4正规文法与有限自动机的等价性 3.3.5 正规式与有限自动机的等价性 3.3.6确定有限自动机的化简 3.4词法分析器的自动产生 3.4.1语言LEX的一般描述 3.4.2超前搜索 3.4.3 LEX的实现 练 习 第四章语法分析——自上而下分析 4.1 语法分析器的功能 4.2 自上而下分析面临的问题 4.3 LL(1)分析法 4.3.1左递归的消除 4.3.2消除回溯、提左因子 4.3.3 LL(1)分析条件 4.4递归下降分析程序构造 4.5预测分析程序 4.5.1预测分析程序工作过程 4.5.2预测分析表的构造 4.6 LL(1)分析中的错误处理 练 习 第五章语法分析——自下而上分析 5.1 自下而上分析基本问题 5.1.1 归约 5.1.2规范归约简述 5.1.3符号栈的使用与语法树的表示 5.2算符优先分析 5.2.1算符优先文法及优先表构造 5.2.2算符优先分析算法 5.2.3优先函数 5.2.4算符优先分析中的出错处理 5.3LR分析法 5.3.1 LR分析器 5.3.2LR(O)项目集族和LR(O)分析表的构造 5.3.3 SLR分析表的构造 5.3.4规范LR分析表的构造 5.3.5 LALR分析表的构造 5.3.6 二义文法的应用 5.3.7LR分析中的出错处理 5.4语法分析器的自动产生工具YACC 练 习 第六章属性文法和语法制导翻译 6.1属性文法 6.2基于属性文法的处理方法 6.2.1 依赖图 6.2.2树遍历的属性计算方法 6.2.3 一遍扫描的处理方法 6.2.4抽象语法树 6.3 S-属性文法的自下而上计算 6.4 L-属性文法和自顶向下翻译 6.4.1 翻译模式 6.4.2自顶向下翻译 6.4.3递归下降翻译器的设计 6.5自下而上计算继承属性 6.5.1 从翻译模式中去掉嵌入在产生式中间的动作 6.5.2分析栈中的继承属性 6.5.3模拟继承属性的计算 6.5.4 用综合属性代替继承属 练 习
### 回答1: 《程序设计语言编译原理陈火旺PDF》是一本关于程序设计语言编译原理的电子书籍,作者为陈火旺。编译原理是计算机科学中的重要领域,涉及到将高级程序设计语言转化为机器语言的过程。这本书通过详细的介绍,从理论到实践,全面地阐述了程序设计语言编译原理。 该书的内容涵盖了编译原理的基本概念、词法分析、语法分析、语义分析、中间代码生成、优化以及目标代码生成等各个方面。读者通过学习这些知识,可以深入了解程序设计语言的编译过程,并掌握相关的理论和技术。 陈火旺是该领域的专家,他在书中以简明易懂的方式解释了复杂的概念,为读者提供了一个全面而系统的学习指南。他还通过实例和实践操作,帮助读者理解和应用所学知识。 这本电子书具有很多优点。首先,它的内容涵盖了编译原理的各个方面,适合初学者入门和进阶学习。其次,书中的例子和案例分析,有助于读者更好地理解概念和原理,并应用于实践中。此外,书中还提供了大量的习题和答案,供读者巩固知识和进行自我评估。 总之,《程序设计语言编译原理陈火旺PDF》是一本权威而实用的编译原理教材,适合计算机科学相关专业的学生和从事编程开发的从业人员阅读和参考。通过学习该书,读者可以系统地学习和掌握程序设计语言编译原理,提高自己在编程领域中的技能水平。 ### 回答2: 《程序设计语言编译原理》是陈火旺教授编写的一本计算机科学与技术方面的教材。这本教材主要介绍了程序设计语言编译原理编译原理是计算机科学中的一门重要的学科,它研究的是如何将高级程序设计语言转换为可执行的机器语言。为了更好地理解编译原理,我们需要掌握一定的数学基础和计算机底层的知识。 《程序设计语言编译原理》这本教材涵盖了编译原理的基本概念和核心技术,帮助读者理解编译器的工作原理和设计方法。书中从词法分析、语法分析到中间代码生成和优化,详细介绍了编译器的各个阶段和相关算法。 陈火旺教授在编写这本教材时,注重理论与实践的结合。书中既有理论知识的讲解和数学推导,也有实际编程的案例和示例代码。这样的安排使得读者能够更好地理解编译原理的核心概念,同时也能够应用所学知识进行实际的编程工作。 《程序设计语言编译原理》的内容逻辑清晰,层次分明。每个章节都有明确的学习目标和总结,帮助读者检验自己的掌握程度和回顾所学知识。此外,书中还提供了一些习题和参考文献,供读者进一步学习和研究。 总之,陈火旺教授编写的《程序设计语言编译原理》是一本权威、全面、深入浅出的教材。通过学习这本书,读者可以全面了解编译原理的基本概念和技术,并能够应用所学知识进行实际的编程工作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Caoyy686868

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值