浅入浅出Javac编译原理

如题所述

Java语言是程序员广泛使用的语言,不仅包括Java本身,还有JDK、J2EE、JVM等概念。新语言如groove、scale等与Java的关系,以及这些非Java语言为何能在JVM上运行,这些问题都值得探讨。本文将深入解析Java与JVM的关系,以及Javac编译器的功能。Javac编译器负责将Java语言规范转化为Java虚拟机语言规范,将Java源代码转化为class字节码。了解一门语言的底层编译机制是掌握该语言的基础,因此,本文将从Javac编译原理开始探讨。

1. Javac是什么?

Javac是一种编译器,负责将一种语言规范转化为另一种语言规范。对于C、C++、汇编等语言,采用边编译边执行的方式,直接编译为CPU可识别的目标机器码,执行时资源占用少,编译速度快。编译器的功能是将语言规范转化为机器码规范。而对于Java语言,由于引入了Java虚拟机,不能直接编译为CPU可识别的机器码,因此需要完全编译后才能执行,占用时间和空间较大。编译器(Javac)的功能是将Java源代码转化为JVM语言,Java虚拟机再将JVM语言编译为CPU可识别的目标机器码。

2. Javac编译器的基本结构

要了解Javac编译器的基本结构,首先要明白编译器将一种语言规范转化为另一种语言规范需要经过哪些步骤。这需要回顾大学时编译原理的知识。首先,读取源码,逐字节分析,找出语法关键词,如Java中的If、while、for等,识别合法的关键词。这个步骤是词法分析过程,结果形成符合Java规范的Token流。接下来,对这些token流进行语法分析,检查关键词是否符合Java语法规范,如If关键词后跟的是否是布尔表达式。语法分析的结果是形成符合Java规范的抽象语法树。语义分析是将复杂的语法转化为简单语法,如将for each转化为for循环结构,解释注解等。语义分析的结果是形成一个新的抽象语法树,更接近JVM语言的语法规则。最后,通过字节码生成器根据新的抽象语法树生成字节码,即将一个数据结构转化为另一个数据结构。代码生成器的结果是生成符合Java虚拟机规范的字节码。

3. 设计模式之访问者模式

在词法分析器、语法分析器、语义分析器和代码生成器中,存在多次遍历语法树的过程。每次遍历都会进行不同的处理动作,对语法树也要进行进一步处理。这实际上是采用访问者模式设计的,每次遍历都是一次访问者的执行过程。
温馨提示:内容为网友见解,仅供参考
无其他回答

浅入浅出Javac编译原理
编译器(Javac)的功能是将Java源代码转化为JVM语言,Java虚拟机再将JVM语言编译为CPU可识别的目标机器码。2. Javac编译器的基本结构 要了解Javac编译器的基本结构,首先要明白编译器将一种语言规范转化为另一种语言规范需要经过哪些步骤。这需要回顾大学时编译原理的知识。首先,读取源码,逐字节分析,...

希望计算机专业学生都知道这些宝藏老师
网络与原理 中科大郑烇老师的计算机网络课程深入浅出,小破站上的高分评价就是最好的证明。刘宏伟老师的计算机组成原理课程,配合唐硕飞教材,适合考研学子。数据库与编译原理 战德臣老师的数据库课程,被誉为“战神”课堂,他的讲解细致入微,培养你的思考能力。陈鄞老师的编译原理课程,以精美的PPT和经典例题...

自制编程语言,六个令你迷惑的问题
自制编程语言和虚拟机是一个诱人的话题,但对于初学者来说,理解和实践却充满挑战。《自制编程语言》这本书深入浅出,以编译原理为基础,引导读者逐步掌握这个领域的知识。它不仅涵盖了基础概念,还提供独特的见解,让读者在实践中受益匪浅。尽管对于没有编译原理基础的人来说可能会感到困难,但这并不妨碍...

java编译器用什么语言写的
在Java安装路径下的bin目录内,可见到多个*.exe可执行文件,如jar.exe、javac.exe、java.exe等,这些正是Java编译器的一部分。值得注意的是,Java编译器并非开源项目。如果你对编译器的内部实现原理有兴趣,强烈推荐阅读《编译原理》一书。这本书深入浅出地解释了编译器的工作原理,将帮助你更好地理解...

编译原理哪个视频好
翁健老师的编译原理课程被广大网友评价为非常优秀。翁老师的讲解风格深入浅出,非常适合初学者入门。以下是关于这门视频的详细解释:1. 翁健老师的专业背景:翁老师对于编译原理有深入的研究,其课程内容涵盖了编译原理的各个方面,从理论到实践都有详细的讲解。他的课程结构清晰,逻辑性强,有助于学生...

初学电脑编程需要什么
4、了解计算机操作系统原理 所有的开发或者说软件应用都是在特定的操作系统上进行的,所以计算机操作系统原理可以说是基础中的基础是必须要了解的。5、数据结构和算法 这门课程能够决定一个人程序设计水平的高低,是学习过程中需要重点掌握的。C和C++都是可以选择的,前期可以先学C,再学C++会相对简单一些...

Java的自学过程中怎么能有个清晰的学习路线?
A.基础理论知识,如操作系统、编译原理、数据结构与算法、计算机原理等,它们并非不重要。如不想成为计算机科学家的话,可以采取"用到的时候再来学"的原则。B.一门编程语言,现在基本上都是面向对象的语言,Java\/C++\/C#等等。如果做WEB开发的话还要学习HTML\/JavaScript等等。C.一种方法学或者说思想,现在基本都是面向...

电脑程序编程怎么学怎样在电脑里学编程
6、熟练掌握C程序设计语言,以及C++、Java、Visual Basic中的一种程序设计语言;7、熟悉数据库、网络和多媒体的基础知识;8、掌握软件工程的基础知识,了解软件过程基本知识、软件开发项目管理的常识;9、了解常用信息技术标准、安全性,以及有关法律、法规的基本知识;10、了解信息化、计算机应用的基础知识;11、正确阅读和...

如何成为一个程序员
1、《计算机组成原理》2、《操作系统》3、《数据结构》4、《汇编语言》5、《 C 》6、《 C++ 》7、《VC 技术内幕》8、《Programming Windows》9、《深入浅出MFC》10、《Advanced Windows》11、《Inside The C++ Object Model》12、《Thinking in C++》13、《Effective C++》14、数据库15、网络16、嵌入式OS...

C语言基础的已经学了,然后也会像图书管理系统这种程度的编程,想要更...
4、《C程序设计语言》推荐数:774这本书简洁易读,会教给你三件事:C 编程语言;如何像程序员一样思考;底层计算模型。 (这对理解“底层”非常重要)—— Nathan《C程序设计语言》(第2版新版)讲述深入浅出,配合典型例证,通俗易懂,实用性强, 适合作为大专院校计算机专业或非计算机专业的C语言教材,也可以作为从事...

相似回答
大家正在搜