软考14-上午题-编译、解释程序翻译阶段

2024-01-24 01:44

本文主要是介绍软考14-上午题-编译、解释程序翻译阶段,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、编译、解释程序【回顾】

目的:高级程序设计语言(汇编语言、高级语言)—【翻译】—>机器语言

1-1、编译方式

将高级语言书写的源程序——>目标程序(汇编语言、机器语言) 

包含的工作阶段:词法分析、语法分析、语义分析、中间代码生成(可省)、代码优化(可省)、目标代码生成。

 词法分析、语法分析、语义分析、目标代码生成

1-2、解释方式

包含的工作阶段:词法分析、语法分析、语义分析。

【注意】:

编译器、解释器都不可省略词法分析、语法分析、语义分析!!!且顺序不可交换!!!

1-3、真题

真题1:

真题2:

真题3:

 真题4:

二、符号表

2-1、符号表的作用

不断收集、记录和使用源程序中一些相关符号的类型和特征等信息,并将其存入符号表中。

记录源程序中各个字符的必要信息,以辅助语义的正确性检查和代码生成

2-2、真题

真题1:

 真题2:

真题3:

真题4:

三、编译器的工作阶段

3-1、词法分析 (考的较少)

编译器的工作阶段,第一阶段

输入:源程序

输出:记号流

词法分析过程,依据的是语言的词法规则。把源程序看做一个字符串进行分析。

任务:对源程序从前到后(从左到右)逐个字符地扫描,从中识别出一个个“单词”符号。

示例:

词法分析阶段的主要作用是,分析构成程序的字符及由字符按照构造规则构成的符号是否符合程序语言的规定。

3-2、语法分析

输入:记号流

输出:语法树(分析树)

作用:确定整个输入串是否构成一个语法上的正确的程序。

可以发现程序中的所有语法错误。

如:括号不匹配,结尾缺少分号...... 

词法分析、语法分析,本质上都是对源程序的结构进行分析。 

3-3、语义分析

输入: 语法树(分析树)

作用:进行类型分析和检查。可以发现静态语义错误。

静态语义错误:

运行之前就能发现的错误。

如:整数取余运算,只能对整型数据进行运算,若其运算对象中有浮点数,就认为是类型不匹配的错误。

不能发现动态语义错误,动态语义错误,运行时才能发现!!! 

所以,语义分析阶段,不能发现程序中的所有语义错误。

3-4、目标代码生成阶段(了解)

生成编译器工作的最后一个阶段。

任务:把中间代码变换成特定机器上的绝对指令代码。这个阶段的工作与具体的机器密切相关

寄存器的分配工作处于目标代码的生成阶段。

3-5、真题 

真题1:

真题2:

 

真题3:

真题4:

真题5: 

真题6:

真题7:

真题8:

真题9:

真题10:

词法分析:扫描字符,识别单词  

真题11:

真题12:

3-6、中间代码的生成

中间代码的共同特征:与具体的机器无关。

可以将不同的高级程序语言翻译成同一种中间代码。

中间代码可以跨平台

因为中间代码与具体的机器无关,所以,使用中间代码有利于进行与机器无关的优化处理和提高变异程序的可移植性

3-6-1、常见的中间代码:        

  • 后缀式
  • 三地址码
  • 三元式
  • 四元式
  • 树、图

3-6-2、真题

真题1:

真题2:

真题3:

真题4:

真题5:

真题6:

四、动态的语义错误

语义分析只能检测出程序的静态语义错误,不能检测出动态的语义错误。

动态的语义错误要到程序运行时才能检测出来。

比如:

除数为0.

循环条件错误导致死循环。

 

4-1、真题

真题1:

真题2:

 

语义错误:

  • 静态语义错误(语义分析阶段检测出来)
  • 动态语义错误 

编译阶段:检测所有的语法错误。

真题3:

真题4:

真题5:

 

 

 

这篇关于软考14-上午题-编译、解释程序翻译阶段的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/638180

相关文章

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

MySQL中的两阶段提交详解(2PC)

《MySQL中的两阶段提交详解(2PC)》:本文主要介绍MySQL中的两阶段提交(2PC),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录引言两阶段提交过程sync_binlog配置innodb_flush_log_at_trx_commit配置总结引言在Inn

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四

idea maven编译报错Java heap space的解决方法

《ideamaven编译报错Javaheapspace的解决方法》这篇文章主要为大家详细介绍了ideamaven编译报错Javaheapspace的相关解决方法,文中的示例代码讲解详细,感兴趣的... 目录1.增加 Maven 编译的堆内存2. 增加 IntelliJ IDEA 的堆内存3. 优化 Mave

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

软考系统规划与管理师考试证书含金量高吗?

2024年软考系统规划与管理师考试报名时间节点: 报名时间:2024年上半年软考将于3月中旬陆续开始报名 考试时间:上半年5月25日到28日,下半年11月9日到12日 分数线:所有科目成绩均须达到45分以上(包括45分)方可通过考试 成绩查询:可在“中国计算机技术职业资格网”上查询软考成绩 出成绩时间:预计在11月左右 证书领取时间:一般在考试成绩公布后3~4个月,各地领取时间有所不同

maven 编译构建可以执行的jar包

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」👈,「stormsha的知识库」👈持续学习,不断总结,共同进步,为了踏实,做好当下事儿~ 专栏导航 Python系列: Python面试题合集,剑指大厂Git系列: Git操作技巧GO