用java是可以写语言编译器的,用任何语言工具写都可以。各语言开发工具间只有开发效率的差异,没有可行不可行的区别。
编译器其实就是一个翻译工具,它可以把代码直接翻译成二进制文件交给CPU执行(二进制指令就是CPU的指令集,当然可以直接操作内存),当然,这个二进制文件需要符合操作系统的可执行文件的格式(PE格式或ELF格式)才能执行。
1、Java可以写C语言编译器,编译器就是一种把文本(源码)按语言语义的规则翻译成字节码的一套程序。 C通常不像Java跨平台,确定目标平台是什么,比如是x86、ARMS、MIPS、JVM,操作系统环境是什么,然后编写输出生成所在环境下能运行的字节码。 用任何语言工具写都可以。 各语言开发工具间只有开发效率的差异,没有可行不可行的区别。
2、C程序在CPU中运行的时候实际是没有指针、struct之类的东西,有的只是内存地址和各种跳转。C语言编译器就是将源文件转换为二进制,并交由CPU解释执行。C语言的各种语法、指针只是为了方便开发而抽象出来的东西。所以,如果真的存在这么一个用Java写的编译器,那么这个编译器需要能够理解C语言语法,并根据这些语法生成对应的字节数组(即汇编指令,这些汇编指令和C编译器生成的汇编指令相同)。如果这个字节数组还满足可执行文件的格式(在Windows中为PE格式,在Linux中为ELF格式),那么这堆字节数组组成的文件就可以在对应的操作系统下执行。