浅谈Javac编译原理
一、javac是什么?
1、javac是一种编译器,能够将一种语言规范转化成另外一种语言规范
2、javac的任务就是将Java源代码转化成JVM能够识别的一种语言(Java字节码),这种字节码不是针对某种机器、某种平台的
二、javac编译器编译程序的步骤
1、词法分析
首先是读取源代码,找出这些字节中哪些是我们定义的语法关键词,如Java中的if、else、for等关键词。
语法分析的结果:从源代码中找出一些规范化的token流。
注:token是一种认证机制
2、语法分析
检查关键词组合在一起是不是Java语言规范,如if后面是不是紧跟着一个布尔表达式。
语法分析的结果:形成一个符合Java语言规范的抽象语法树
3、语义分析
把一些难懂的、复杂的语法转化为更加简单的语法。
语义分析的结果:完成复杂语法到简单语法的简化,如将foreach语句转化成for循环结果,还有注解等。最后形成一个注解过后的抽象语法树,这颗语法树更接近目标语言的语法规则。
4、生成字节码
通过字节码生成器生成字节码,根据经过注解的抽象语法树生成字节码,也就是将一个数据结构转化成另一个数据结构。
代码生成器的结果:生成符合Java虚拟机规范的字节码。
注:抽象语法树
在计算机科学中,抽象语法树是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。
三、javac编译器的基本结构
按照上述编译步骤来看,可以将javac编译器分为4个模块:词法分析器、语法分析器、语义分析器和代码生成器。
素小暖讲Java@目录
转载于:https://my.oschina.net/u/4006148/blog/3067315
浅谈Javac编译原理相关推荐
- 浅入浅出Javac编译原理——爪哇岛探险(1)
浅入浅出Javac编译原理 Java语言是当今程序员中使用最广的语言,不光是从语言本身来说,还包括了与Java相关的一些概念.例如JDK,J2EE,JVM等等.还不断有新的语言出现,如groove,s ...
- 编译原理代码生成器java_浅入浅出Javac编译原理
浅入浅出Javac编译原理 Java语言是当今程序员中使用最广的语言,不光是从语言本身来说,还包括了与Java相关的一些概念.例如JDK,J2EE,JVM等等.还不断有新的语言出现,如groove,s ...
- java转换成class文件_浅谈JVM编译原理-.java文件转变为.class文件的过程
为什么需要编译? 我们平常写代码,有规范的命名方式,都能够看得懂,但是我们写的代码计算机是看不懂的,所以需要编译,也就是一个转换的过程,如下: 1.这个是咱们平时写的代码,就比较好理解,对人友好 2. ...
- 编译原理代码生成器java_浅谈JVM编译原理-.java文件转变为.class文件的过程
为什么需要编译? 我们平常写代码,有规范的命名方式,都能够看得懂,但是我们写的代码计算机是看不懂的,所以需要编译,也就是一个转换的过程,如下: 1.这个是咱们平时写的代码,就比较好理解,对人友好 2. ...
- 浅谈会话劫持原理及实践
<监视你的一举一动> ---浅谈会话劫持原理及实践 前言 通常,大家所说的入侵,都是针对一台主机,在获得管理员权限后,就很是得意:其实,真正的入侵是占领整个内部网络.针对内部网络的攻击方法 ...
- 浅谈反编译在项目中的使用
浅谈反编译在项目中的使用 什么是反编译 反编译的作用 反编译工具 动态编程 JavaSsist 源码安全 什么是反编译 将可读性较好的高级计算机语言(JAVA,C#,C)转换成计算机能解读.运行的低阶 ...
- 浅谈:Spring Boot原理分析,切换内置web服务器,SpringBoot监听项目(使用springboot-admin),将springboot的项目打成war包
浅谈:Spring Boot原理分析(更多细节解释在代码注释中) 通过@EnableAutoConfiguration注解加载Springboot内置的自动初始化类(加载什么类是配置在spring.f ...
- 浅谈前端路由原理hash和history
浅谈前端路由原理hash和history
- 浅谈“三层结构”原理与用意(转帖)
浅谈"三层结构"原理与用意 序 在刚刚步入"多层结构"Web应用程序开发的时候,我阅读过几篇关于"asp.net三层结构开发"的文章.但其多 ...
最新文章
- git reset用法
- c实现多语言编程,C/C++编程中多国语言处理
- noi.ac NOIP2018 全国热身赛 第四场 T1 tree
- iOS----------使用cocoapods遇到的问题
- 数据结构基础:栈(Stack)
- UVA - 133 ​​​​​​​The Dole Queue
- VUE学习和开发中的注意点总结(一),便于回顾(不断完善补充。)
- sqlserver 只有函数和扩展存储过程才能从函数内部执行
- 第六章——并行接口技术
- java ssh2连接_通过JCraft的jsch包基于SSH2协议实现连接linux服务器提供终端操作的java工具实现类SftpUtil...
- Android中SQLite,ContentProvider和ContentResolver的使用(一)
- axi时序图_AXI总线学习
- 【Redis学习笔记(九)】之 Redis客户端详解
- 计算机网络之数据传输方式:电路交换、报文交换和分组交换
- oracle excel vba6,如何在WPS个人Excel表格中启用宏功能来使用VBA
- (待补充)【读书笔记】20190809《运营之光》——黄有璨
- html语音对话,纯CSS对话框/对话气泡/语音泡沫/speech bubbles【27个示例】
- 响应式布局——Bootstrap
- webpack打包生成的map文件_Webpack的devtool和source maps
- EfficientNet网络解析