×

java不能编写汇编语言编译器 编译

java不能编写汇编语言编译器(为什么我编写的一个JAVA程序不能编译,但是可以运行)

admin admin 发表于2024-02-25 17:58:33 浏览31 评论0

抢沙发发表评论

“java不能编写汇编语言编译器”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看java不能编写汇编语言编译器(为什么我编写的一个JAVA程序不能编译,但是可以运行)!

本文目录

为什么我编写的一个JAVA程序不能编译,但是可以运行

首先,我实在受不了ufo2030ufo 小白同志,人家显然是写j2me程序,不懂别叫嘛。然后呢,我也很服楼主,一个不能编译的程序可能运行么?楼主所说的不能编译究竟是指什么?不能产生class?jad?jar?还是别的什么?老实说,你的两个程序其实一样,既然第二个正确,第一个不会错的,应该是运行环境配置有问题

如何将java语言转变为汇编语言

  流程:

  1. Java词法分析

    最开始的时候,高级语言编写的程序对编译器来说只是一连串的单个字符组成的字符串。为了让编译器识别这一连串的字符串,需要逐个字符的读取源程序,然后将其切分成有意义的单词,这些被切分后的单词在编译器眼里是以

    《标识,语义值》对的形式存在。

    为了从源程序字符串中依次找出单词,编译器需要具有扫描功能,通常这种扫描器可以用一组有限状态机来实现。为了说明有限状态机是怎么一回事,下面给出一个实例。

    下图为一个识别数字的有限状态机,数字由整数部分和可选的小数部分组成。因此,根据这个有限状态机,250和3.14159都能被识别成一个有效的数字。

  2. Java语法分析

    完成了“词法分析”后,接下来就是激动人心的“语法分析”阶段。通过语法分析得到语法树。

  3. Java翻译语法树

    首先,寻找最小表达式,接下来,将最小表达式与其周边的表达式合并。最后,将所有的表达式有序的进行合并,得到最终的汇编语言描述。

    至此,我们便将高级语言翻译成了汇编语言。

学习Java用不用了解每条语句对应的汇编语言

从Java的角度来说,Java这种语言的应用主要是在高层应用。Java的语法总体而言比较简单,封装机制比较完善,这些简单性就是为了使开发者能把精力集中在业务流方面,而不是语言本身方面。Java的这种特性使得了解Java底层机制并不能对你应用Java产生太大的帮助。做Java的人更应该去关心一些软件工程相关的问题,而不是拘泥于底层实现机制。而且由于Java本身并不复杂,且很少涉及直接硬件编程,因此只要有一定的Java程序设计经验,一般都能体会到其内部实现的大致情况,例如堆栈大体上如何布局等,这已经足够了,你再去详细了解每一个细节,并不能帮助你把程序写得好很多。从一个所有语言通用的观点来说,了解一个语言的编译细节,是要建立在对语言本身一定理解的基础之上的。当一个具有钻研精神的程序员具备了这样的基础之时,他自然而然会去了解更深入的细节。新手的很多“有没有用,该不该学”的问题,恰恰是反映了他们还没有具备那样的学习基础,新手需要的不是一步登天的想法,而是踏踏实实把基础打牢的决心。而且了解编译细节也并非只是知道“每句语言对应了哪句汇编代码”那么简单的,这是一个非常复杂的学习过程,需要相当的基本功,包括编译原理、计算机组成原理、接口原理、操作系统原理等等计算机专业里最复杂的课程内容。而且对于高级语言而言,也并不存在一个你所想象中的汇编和语句的一一对应关系。最后,还想澄清一些概念。严格意义上说,Java不属于编译型语言,因为Java的“编译器”仅仅是将Java代码翻译成字节码,而不是机器码。字节码通过虚拟机转变为本地机器指令。研究这些底层代码一般有几种目的,一是逆向工程,二是加深对语言理解,以期写出更好的代码,三是编译理论的研究者改进编译过程。我前面已经分析过,对于Java这种语言而言,第二个目的并不是一个正确的方向,至少不是一个有效的方向。而第三个目的则远远不是一般人所能企及的,这里面有个人能力的原因,也有制度方面的原因(所以你所说的“改进Java”只能作为一种业余爱好意义上的改进,并不具有实践上意义,除非有一天你能进入具有发言权的大型公司或组织,并成为其中的核心技术人员)。研究Java字节码一般是基于第一个目的,即逆向工程。而至于说研究虚拟机怎样把字节码编程本地指令,则一般是虚拟机设计人员研究的问题,Java程序员去研究的话,意义也不大。我不知道说了这么多有没有把问题讲清楚。

同样是高级语言为什么C语言可以编写51单片机程序,JAVA却不能编写

无论Java还是C,任何一种高级语言都可用来编程控制单片机,只要开发出相应的编译器用以转换相应的高级语言到机器码即可。还有Java的虚拟机(Virtual machine)不是必须的,它只是用于多操作系统为目地的。实际上,虚拟机就是一个翻译器(Interpreter), 安装在Internet Explorer 或不同的操作系统的机器中,把Java的中介码(Native code)转换成相应的操作系统的机器码而已。翻译器与编译器是有区别的。

用Java可以写C语言编译器吗

用java是可以写语言编译器的,用任何语言工具写都可以。 各语言开发工具间只有开发效率的差异,没有可行不可行的区别。编译器其实就是一个翻译工具,它可以把代码直接翻译成二进制文件交给CPU执行(二进制指令就是CPU的指令集,当然可以直接操作内存),当然,这个二进制文件需要符合操作系统的可执行文件的格式(PE格式或ELF格式)才能执行。换个角度理解:linux gcc实际上就是一个工具集合,包含编译器,汇编器,连接器等编译器就是把c语言程序翻译为一种叫做目标文件的中间表示形式,然后交给汇编器,翻译为汇编程序,而汇编执行直接对应二进制机器码,链接之后就可以变成可执行文件了。而用java实现的编译器完全可以代替gcc工具集合中的编译器,生成相同的目标文件的中间表示形式,在交给gcc汇编器,连接器等处理。

java如何编译c或c++文件

  1. java是不能够编译C/C++文件的。他们原理完全不同。背后的运行机制也完全不一样。

    C/C++源文件只能够用C/C++的编译器来编译。

  2. 以GCC编译器为例,整个编译可以分为四步。第一步是预处理,包括语法检查等工作。gcc -P abc.c第二步由源程序生产汇编语言代码。gcc -S abc.c 会生成abc.s文件,这个文件里就是汇编代码。第三步编译器生成目标代码,一个源文件生成一个目标代码。gcc -c abc.c会生成abc.o第四步连接器从目标代码生成可执行文件。gcc abc.o目标代码包括机器码和符号表(函数及变量名)。连接器的主要作用是通过符号表在库文件和其他模块中找到在目标代码中引入或未定义的符号(函数及变量名),将几个目标代码合成可执行文件。

java里能不能内嵌汇编

从语法级别上不提供对汇编内嵌的支持,不过,如果确实需要,可以借助于JNI,它可以调用C/C++代码,这样你可以间接地嵌入汇编代码。

c++,java这样的高级语言高级语言是用汇编语言创造的吗

用c写的吧,语言这个东西就和滚雪球一样,有了一些基础东西后,比如简单的变量定义,简单的控制结构,就可以利用这些基本东西开发复杂的语句,甚至开发新的程序设计语言,但最终都是转换为机器语言执行的。

请问如果C,C++经过编译成为汇编语言,那么JAVA是不是经过编译也编程汇编语言了呢

先纠正前半句,C/C++最终会编译成机器语言(CPU可直接识别的、比汇编还低级的指令符)然后是Java,Java的编译只会生成字节码文件,而不会生成汇编(更不会到机器语言)。Java程序运行时,字节码文件会装载入java虚拟机,虚拟机实时将字节码“翻译”成机器指令来运行

文章分享结束,java不能编写汇编语言编译器和为什么我编写的一个JAVA程序不能编译,但是可以运行的答案你都知道了吗?欢迎再次光临本站哦!