程序设计语言
编译程序和解释程序
低级语言
汇编和机器语言
高级语言
c c++ java python

源程序(.java) -------------------解释(脚本)/编译(c c++ java)程序 翻译--------------------->目标程序(机器可以识别)
编译程序:
源程序.java ------编译程序------>等价源程序的目标程序.class 编译程序和源程序不参与目标程序的执行过程。
解释程序:
不生成独立的目标程序,源程序和解释程序都要参加到代码的运行过程。
控制程序:
顺序 选择 循环
编译器工作阶段

编译步骤
词法 语法 语义 目标代码生成 是必须的且顺序不可修改
解释步骤
词法分析 语法分析 语义分析 也是必须的
符号表
不断收集 记录 使用源程序的相关符号的特征,并将其存入符号表。
记录程序的重要信息,便于辅助语义的正确性检查和代码的生成。
词法分析
输入:符号表
把源程序看成字符串,从左到右,从上到下,逐个的扫描出单词符号。
词法分析的过程依据 的是语言的词法规则,判断结构是否正确,并输出记号流。
语法分析
输入:记号流
输出:语法树(分析数)
可以检测程序中的语法错误。例如检测括号匹配,变量未赋值被使用。
语义分析
输入:语法树
分析语法结构的含义,检测是否出现静态语义错误(类型不匹配、除小数)。
动态语义错误
在程序运行的时候可以检测,例如 除0,死循环。

目标代码生成
是编译器工作的最后一个阶段。
目的:
-
是把中间代码变成特定机器可以运行的目标代码,和具体的机器密切相关。
-
程序中的寄存器的分配。
中间代码生成
中间代码和具体的机器无关,可以将不同的高级语言翻译成同一种中间代码,具有良好的可移植性。
常见的中间代码有:
后缀式、三地址码、三元式、四元式、树、图。
正规式
词法分析阶段使用正规式
实例

有限自动机
词法分析阶段使用有限自动机
确定的有限自动机:每个状态识别字符后转移的状态是唯一的。
不确定的有限自动机:每个状态识别字符后转移的状态是不唯一的。
正确识别:一个正规式识别完成后到终态。
不需要识别任何字符就可以转移。
上下文无关文法
大多数程序设计语言用上下文无关文法来描述

后缀式+中缀式
中缀式:1-2 + 3 *(1+2)
后缀式:12-34*
中缀 转后缀式:
- 1-2 + 3 *(12+)
- 1-2+(312+*)
- (12-)+(312+*)
- 12-312+*+
后缀转中缀
栈
杂题



【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战