Java编译执行过程
在刷软件设计师中级考试的题目,判断关于编译系统对某高级语言进行翻译的叙述的对错。记得刚开始学Java的时候自己就觉得自己对程序的执行过程理解的相当的透彻,但是一对答案,我的小心脏就有点受不了了,特此在这记录一下,希望自己之后不要在弄错了。
1,编译过程概述
编译程序的功能是把某高级语言书写的源代码翻译成与之等价的目标程序(汇编语言或机器语言)。编译工作的过程可以分为6个阶段。如下图所示,在实际的编译中可能会将其中的某些阶段结合在一起。
1)词法分析
词法分析是编译过程的第一阶段,其任务是对源程序从前到后(从左到右)逐个字符地扫描,从中识别出一个个的“单词”符号。语法分析的任务是在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类语法单位,如“表达式”、“语句”和“程序”等。
2)语法分析
语法分析的任务是在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类语法单位,如“表达式”、“语句”和“程序”等。
3)语义分析
语义分析阶段主要检查源程序是否包含静态语义错误,并收集类型信息供后面的代码生成阶段使用。特别注意:只有语法和语义都正确的源程序才能被翻译成正确的目标代码。
4)中间代码生成
中间代码的生成阶段是根据语义分析的输出生成中间代码(一种简单且含义明确的记号系统)。需要注意的是中间代码与机器无关,可以有若干种形式,可以将不同的高级语言程序翻译成同一种中间代码,因为与机器无关,使得中间代码有利于进行与机器无关的优化处理,以提高编译程序的可移植性。中间代码的表达形式有四元式,三元式,间接三元式,波兰式,逆波兰式等。
5)优化
在于对前段代码产生的中间代码进行加工,以期在最后的阶段产生更为高效(省时间和空间)的代码。
6)目标代码生成
目标代码生成是编译器工作的最后一个阶段。这一阶段的任务是把中间代码变换成特定机器上的绝对指令代码、可重定位的指令代码或汇编指令代码,这个阶段的工作与具体的机器密切相关。
源程序不可避免地会有一些错误,这些错误大致可分为语法错误和语义错误。语法错误是指语言结构上的使用错误,是指编译时所发现的程序错误,如单词拼写错误、标点符号错、表达式中缺少操作数、括号不匹配等有关语言结构上的错误。
2,下面可以说说Java程序的编译过程了
从上面图中可以看出java程序的执行过程分为编译和执行的过程:java源代码(.java文件)通过javac.exe编译阶段的相关过程生成中间代码再到字节码文件(.class)最后由java.exe执行输出最后的结果。
- 感谢你的阅读,如果有什么不正确的地方欢迎指正,希望与大家共同学习,一起进步。
- 该文章网址:https://www.cnblogs.com/cnqijian/p/13894006.html
- 该文章参考了软件设计师教程
- 如你想转载请你表明来源
- 一天进步一小步
最新文章
- 使用css3的动画模拟太阳系行星公转
- 从svn资源库目录checkout出maven项目方法
- EXCEL里面的数字显示为文本 不用科学计数法显示
- DataPager 分页样式(css)
- sql group by 理解
- MVC下HtmlHelper自带BeginForm表单提交与异步Ajax请求
- linux:awk之RS、ORS与FS、OFS
- 关于Animation动画事件的几项测试
- mysql 查询一条记录的下一条和上一条记录
- 《Linux命令行与shell脚本编程大全》 第二十二章 学习笔记
- PHP与MySQL动态网站开发2
- XML3_XML元素和节点的具体解释
- C#通过外部别名,解决DLL冲突问题
- JS 正则表达式否定匹配(正向前瞻)
- 【kafka学习之六】kakfa消息生产、消费示例
- 如何将一个文本内容通过PHP 以表格的方式输入到页面上
- Go语言的map如何判断key是否存在
- java多线程快速入门(五)
- ubantu查看进程操作
- MyBatis-Plus使用教程
热门文章
- Linux下的MediaWiki的部署启动遇到的问题与解决方案
- 跟随杠精的视角一起来了解Redis的主从复制
- python:列表的去重:两种方法的问题是:结果是没有保持原来的顺序。
- .Net Core AddTransient、AddScoped和AddSingleton的使用
- Alpha冲刺-第九次冲刺笔记
- 日志聚合工具之 Loki
- Promise自定义,看我如何征服你
- PyQt(Python+Qt)学习随笔:QAbstractItemView的tabKeyNavigation属性
- 派大星的烦恼MISC
- golang GMP goroutine调度器