热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

【编译原理】:编译原理期末复习1

1,关于文法一个文法G可以抽象的分为四元组(VN,VT,P,S)VN表示非终结符VT表示终结符P表示产生式S表示开始符2,

1,关于文法
一个文法G可以抽象的分为四元组(VN,VT,P,S)
VN表示非终结符 VT表示终结符 P表示产生式 S表示开始符

2,老师上课说的编译原理的阶段说的是:词法分析,语法分析,语义分析,中间代码生成,代码优化,目标代码生成
其中 语法分析,语义分析,中间代码生成称为 语法制导翻译
语义分析,中间代码生成称为 语义翻译

3,乔姆斯基创造了文法,克林创造了自动机,其实这两种东西是等价的

4,优化可生成“运行时间段且存储空间小的代码”

5,如何判断文法是不是二义文法
对一个串进行识别,判断其是否能够分出两个串
已知文法 G[S] 为 S → aSb|Sb|b ,试证明文法 G[S] 为二义文法。
证明:    
  由文法G[S]:S→aSb|Sb|b,对句子aabbbb对应的两棵语法树为:
这里写图片描述

6,如果文法G是无二义性的,那么它对应的最左推导和最右推导对应的语法树必定相同

7,构造编译程序应该掌握:源程序,目标语言,编译方法

8,两个正规式等价说的是两个正规式所识别的语言集相等

9,计算机执行用高级语言编写的程序主要有:解释编译

10,自上而下分析法操作 (自己想)

11,题型:消除左递归,提取公因子
解题方法:
很好想,左递归就套公式,用一个临时变量解决,提取公因子就用提取公因子,换一个新变量出来
例题:
考虑文法 G[S]:
S → (T) | a+S | a
T → T,S | S
消除文法的左递归及提取公共左因子。
解:消除文法G[S]的左递归:
S→(T) | a+S | a
T→ST′
T′→,ST′| ε
提取公共左因子:
S→(T) | aS′
S′→+S | ε
T→ST′
T′→,ST′| ε

12,几个填空题
词法分析输入:源程序 输出:单词符号
语法分析输入:单词符号 输出:语法单位
语法分析的方法大致分为:自上而下分析法 + 自下而上分析法(现在我还没看)
预测分析使用 预测分析表 + 符号栈 联合控制
最右推导 规范推导! 最右推导就是从右边开始推?哦了?
根据优化所设计的范围,可把优化分为:局部优化,循环优化,全局优化
优化的定义:对程序进行各种变换,使的从变换后的程序出发,能够产生更高效的代码
文法G含有终结符的句型成为 句子

自上而下分析法: 从开始符号开始推,推出句子 (句子为下)
自下而上分析法:从句子开始逐步归约,直到归约到开始符

目标代码的形式:机器语言,汇编语言,待装配机器语言模块
代码考虑问题:(1)生成目标代码短 (2)减少访问内存(3)考虑到计算机指令系统的特点

display表:嵌套层次显示表
作用:登记外层每个活动的最新的起始地址

13,几个填空题:
13.1编译程序首先要识别出源程序中每个(单词),然后分析每个(句子)并翻译其含义
13.2通常把分析前端和综合后端两大阶段,词法,语法和语义分析是对源程序的(分析),中间代码生成,代码优化,目标代码生成是对源程序的(综合)
13.3程序设计语言的发展带来了日渐多变的运行时存储管理方案,主要分为(静态存储分配) + (动态存储分配)
13.4对于编译程序而言,输入数据是(源程序),输出结果是(目标程序)


推荐阅读
  • 并发编程:深入理解设计原理与优化
    本文探讨了并发编程中的关键设计原则,特别是Java内存模型(JMM)的happens-before规则及其对多线程编程的影响。文章详细介绍了DCL双重检查锁定模式的问题及解决方案,并总结了不同处理器和内存模型之间的关系,旨在为程序员提供更深入的理解和最佳实践。 ... [详细]
  • 本文深入探讨了C++对象模型中的一些细节问题,特别是虚拟继承和析构函数的处理。通过具体代码示例和详细分析,揭示了书中某些观点的不足之处,并提供了更合理的解释。 ... [详细]
  • 精选15款免费扁平化界面设计资源
    高质量的网页和移动元素是任何Web或移动项目的基础。优秀的UI设计组件不仅能够提升用户体验,还能显著缩短设计师的工作时间,帮助他们快速创建出引人注目的作品。本文将分享一系列免费的扁平化设计素材。 ... [详细]
  • 本文详细介绍了如何在 Windows 环境下使用 node-gyp 工具进行 Node.js 本地扩展的编译和配置,涵盖从环境搭建到代码实现的全过程。 ... [详细]
  • 解决C++编译错误C3867的方法
    本文详细介绍了在不同版本的Visual Studio中,如何正确处理成员函数指针以避免编译错误C3867。同时,提供了一个具体的代码示例及其优化方案。 ... [详细]
  • 本文详细介绍了Java中的输入输出(IO)流,包括其基本概念、分类及应用。IO流是用于在程序和外部资源之间传输数据的一套API。根据数据流动的方向,可以分为输入流(从外部流向程序)和输出流(从程序流向外部)。此外,还涵盖了字节流和字符流的区别及其具体实现。 ... [详细]
  • Python入门:第一天准备与安装
    本文详细介绍了Python编程语言的基础知识和安装步骤,帮助初学者快速上手。涵盖Python的特点、应用场景以及Windows环境下Python和PyCharm的安装方法。 ... [详细]
  • 本文详细介绍了如何准备和安装 Eclipse 开发环境及其相关插件,包括 JDK、Tomcat、Struts 等组件的安装步骤及配置方法。 ... [详细]
  • 本文深入探讨了 C++ 中的友元机制,包括外部函数友元、成员函数友元和类友元。友元打破了对象的封装性,赋予特定实体访问私有成员的能力。 ... [详细]
  • 创建项目:Visual Studio Online 入门指南
    本文介绍如何使用微软的 Visual Studio Online(VSO)创建和管理开发项目。作为一款基于云计算的开发平台,VSO 提供了丰富的工具和服务,简化了项目的配置和部署流程。 ... [详细]
  • 在Java中,this是一个引用当前对象的关键字。如何通过this获取并显示其所指向的对象的属性和方法?本文详细解释了this的用法及其背后的原理。 ... [详细]
  • 科研单位信息系统中的DevOps实践与优化
    本文探讨了某科研单位通过引入云原生平台实现DevOps开发和运维一体化,显著提升了项目交付效率和产品质量。详细介绍了如何在实际项目中应用DevOps理念,解决了传统开发模式下的诸多痛点。 ... [详细]
  • 2018年3月31日,CSDN、火星财经联合中关村区块链产业联盟等机构举办的2018区块链技术及应用峰会(BTA)核心分会场圆满举行。多位业内顶尖专家深入探讨了区块链的核心技术原理及其在实际业务中的应用。 ... [详细]
  • 本文详细介绍了C语言中的指针,包括其基本概念、应用场景以及使用时的优缺点。同时,通过实例解析了指针在内存管理、数组操作、函数调用等方面的具体应用,并探讨了指针的安全性问题。 ... [详细]
  • C语言标准及其GCC编译器版本
    编程语言的发展离不开持续的维护和更新。本文将探讨C语言的标准演变以及GCC编译器如何支持这些标准,确保其与时俱进,满足现代开发需求。 ... [详细]
author-avatar
YYCC77777
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有