当前位置: 首页 > news >正文

计算机软考中级 知识点记忆 — 编译型与解释型语言对比(Java、C、C++、Python)个人笔记

语言

类型

编译/解释过程

执行方式

C

编译型语言

编译器将源码编译成机器码(.exe / .out 等可执行文件)。

直接在计算机硬件上运行。

C++

编译型语言

编译器将源码编译成机器码。

直接在计算机硬件上运行。

Java

半编译半解释型

编译器将源码编译为字节码(.class),然后通过 JVM 解释执行或 JIT 编译。

JVM 虚拟机解释或即时编译执行。

Python

解释型语言

通过解释器逐行解释并执行(CPython 使用字节码,解释执行)。

依赖于 Python 解释器。

📚 记忆方法:

  1. C/C++ → Compile(编译型):一次性编译成机器码。
  2. Python → Purely Interpreted(解释型):逐行解释执行。
  3. Java → Java Virtual Machine(半编译半解释型):编译成字节码,然后解释执行或即时编译。

💡 口诀:

  • C 和 C++ 编完即用,Python 编完就跑,Java 编完字节码,JVM 才能跑! 🚀

编译过程的核心区别:

解释型语言与编译型语言的区别(执行过程)

特点

编译型语言(C、C++)

解释型语言(Python、JavaScript)

编译过程

预处理 -> 编译 -> 汇编 -> 链接 -> 可执行文件。

词法分析 -> 语法分析 -> 字节码生成 -> 解释执行。

执行方式

编译后生成机器码文件,直接运行。

逐行解释或即时编译后执行。

可移植性

差(不同平台需重新编译)。

强(跨平台,只需安装解释器)。

执行效率

高,生成的是机器码。

较低,解释执行或即时编译优化后较高。


编译器的工作过程:

词法分析 -> 语法分析 -> 字节码生成 -> 解释执行

1. 词法分析(Lexical Analysis)

目的:将源代码转换成一系列记号(tokens)。

  • 输入:源代码的字符流(如 C、Java 或 Python 的源代码)。
  • 输出:记号流,一系列标识符、关键字、运算符、常量等的序列。

工作原理: 词法分析器(Lexer)从源代码的字符流中读取字符,识别出其中的有意义的单元(记号),比如关键字、标识符、常量等,并将它们转化为记号(tokens)。

主要检查:输入字符是否按照一定规则生成;

2. 语法分析(Syntax Analysis)

目的:根据语法规则检查记号流的结构,并构建一个语法树。

  • 输入:记号流(由词法分析产生的标记序列)。
  • 输出:语法树或抽象语法树(AST),表示程序的结构。

工作原理: 语法分析器(Parser)根据编程语言的语法规则(通常由文法描述)来分析词法分析器输出的记号流,检查这些记号是否符合语法结构。如果符合语法规则,构建一个语法树,否则就会报错。

主要检查:主要对结构进行检查;

2.1 语义分析

主要检查:主要对语句进行检查 以及 类型;

3. 字节码生成 ==》中间代码生成(Bytecode Generation)

目的:将语法树转换为中间字节码。

  • 输入:语法树(或抽象语法树)。
  • 输出:字节码(或中间代码)。

工作原理: 字节码生成器根据语法树,生成一组中间代码或字节码,这种字节码是与具体平台无关的,它不依赖于特定的硬件和操作系统。字节码是为后续的解释或编译阶段做准备的。

例如,在 Java 中,源代码会被编译成字节码(.class 文件),然后可以在 Java 虚拟机(JVM)上运行。

记住:字节码生成的任务是将语法树“翻译”成一种平台无关的中间表示,便于后续执行。

4. 解释执行(Interpretation)==》代码优化和目标代码生成

目的:通过解释器直接执行字节码,或将其转换成机器码。

  • 输入:字节码(或中间代码)。
  • 输出:程序执行的结果。

工作原理: 解释执行器(Interpreter)负责将字节码逐条解释并执行。与传统的编译方式不同,解释执行并不是将程序完全转换成机器代码,而是逐行地解释和执行。

例如,在 Python 中,源代码会被直接解释执行,不需要显式地生成中间字节码文件(虽然 Python 实际上会生成一些中间字节码 .pyc 文件)。

相关文章:

  • 牟长青 做网站推广的四个基本要点网络销售推广公司
  • 那个网站平台可以做兼职公司网站如何制作设计
  • 杭州做网站公司it培训机构排名
  • 企业网站设计多少钱合肥网
  • 澄迈网站建设网店运营是做什么的
  • 纯JSP网站开发百度推广方法
  • 使用jdk1.8.0_322 版本时, https不支持SSLv3协议问题, 多种解决方案
  • EasyExcel-一款好用的excel生成工具
  • Chapter03_数字图像的基本运算
  • 41--华为IPSec主备链路实验:当加密隧道遇上“双保险“
  • How to connect a mobile phone to your computer?
  • 软件工程第一章习题
  • 【微服务架构】SpringSecurity核心源码剖析+jwt+OAuth(三):SpringSecurity请求流转的本质
  • windows手动添加鼠标右键弹窗快捷方式
  • Kafka和RocketMQ相比有什么区别?那个更好用?
  • XXL-JOB 分片广播模式深度解析:从原理到实战
  • Linux/树莓派网络配置、远程登录与图形界面访问实验
  • K8S集群节点负载无故飙升:CPU软死锁解决方案
  • 进程间通讯(IPC)
  • 【Pandas】pandas DataFrame infer_objects
  • GZ036区块链卷一 EtherStore合约漏洞详解
  • AI重构SEO关键词精准布局
  • 【Guava】并发编程ListenableFutureService
  • Openlayers:海量图形渲染之WebGL渲染
  • npm报错 npm ERR! Error while executing:npm ERR! ,npm 启动以及安装过程的各种报错
  • Linux网络基本命令及相关配置