有关编译器的问题
发布网友
发布时间:2022-05-18 23:02
我来回答
共2个回答
热心网友
时间:2023-11-18 06:35
编译器可不是你想象得那么简单的哦:)
很多编译器并不是用汇编语言写的,那样太累了。
编译器涉及非常复杂的词法和语法分析。现在基本上都是采用lex和yacc之类的工具自动生成词法分析程序和语法分析程序。每种语言都有各自不同的词法和语法,你需要提供词法和语法的正则表达式之类的东西给lex和yacc,然后由这两个工具生成词法分析程序和语法分析程序。词法和语法分析程序可以将你设计的语言编写的程序生成中间代码,然后再想办法编程机器可读的机器码就能运行了。
当然你也可以自己手动写词法和语法分析器,不过那个工程太过庞大。
热心网友
时间:2023-11-18 06:36
你好!编译器(在windows下,javac.exe)将源代码(java文件)编译为字节码(bytecode),存放在class文件中。
字节码不能直接在机器上执行,而是通过虚拟机(windows下是java.exe)执行。具体的执行方式有两种:
1. 一般情况下解释执行。解释执行并不是“解释为用c++语言写成的程序”,而是jvm把字节码看成脚本,根据字节码中的指令,由JVM去调用实际的本地方法。
2. 在打开了JIT参数的前提下,jvm会把执行过程中发现的热点位置,由jvm内部的即时编译器编译为本地机器码直接执行。
编译器将java文件编译为class文件,解释器将class文件变为机器语言