软考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

相关文章

Java编译错误java.lang.NoSuchFieldError的解决方案详析

《Java编译错误java.lang.NoSuchFieldError的解决方案详析》java.lang.NoSuchFieldError是Java中的一种运行时错误,:本文主要介绍Java编译错... 目录前言解决方案1. 统一JDK版本环境2. 优化maven-compiler-plugin配置3. 清

GO语言中gox交叉编译的实现

《GO语言中gox交叉编译的实现》本文主要介绍了GO语言中gox交叉编译的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录一、安装二、使用三、遇到的问题1、开启CGO2、修改环境变量最近在工作中使用GO语言进行编码开发,因

Docker多阶段镜像构建与缓存利用性能优化实践指南

《Docker多阶段镜像构建与缓存利用性能优化实践指南》这篇文章将从原理层面深入解析Docker多阶段构建与缓存机制,结合实际项目示例,说明如何有效利用构建缓存,组织镜像层次,最大化提升构建速度并减少... 目录一、技术背景与应用场景二、核心原理深入分析三、关键 dockerfile 解读3.1 Docke

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件

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文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、