用Java编写的C语言编译器

10

我希望在Java应用程序中集成C语言编译器,以便编译C源代码而无需创建文件(类似于Java编译器API)。是否有完全使用Java编写的C编译器?

2个回答

6

你的Github C编译器链接没有指向Github,而且链接已经失效了。 - HRJ
已修复,感谢通知!(这真是很久以前的事了) - brbtsl

1

ANTRL为C语言提供了语法。针对特定平台生成汇编代码的问题并没有为您解决,但是只要您知道应该是什么指令,就可以遍历AST并发出指令。


10
将源代码解析为AST通常是编译器中最容易的部分。语义分析和代码生成将是一个巨大的任务。 - Paul Cager
1
根据定义,C编译器是平台相关的,因为生成的汇编代码与平台绑定。ANTLR无法帮助生成汇编代码,但其他任何工具也不能。如果您理解这个问题,那么这是一个困难的问题。 - duffymo
1
你的跨平台结论是基于假设“将x86视为您的VM语言”。当我说机器码与平台绑定时,我并没有做出这个假设。我意识到C语言与为其生成的机器码是独立的。我谈论的是第二步——在使用C标准语法将源代码解析为AST之后的机器码生成。 - duffymo
您可以选择生成一个平台无关的编译程序,通过选择虚拟目标指令集,例如自定义指令集、JVM或CIL。这将使代码生成变得更加容易(除了指针算术可能会对JVM和CIL造成困扰)。 - Ira Baxter
1
不,你不必编写机器码;解释器可以执行特定于机器的I/O、内存访问和操作系统调用。如果你想要使用C语言进行任意低级别的编程,你必须清楚地了解硬件是什么。OP在这里的目标相当不明确。 - Ira Baxter
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接