如何实现idl到java编译器

如何实现idl到java编译器,java,compiler-construction,corba,idl,Java,Compiler Construction,Corba,Idl,我需要实现一个idl到java编译器。事实上,它不是idl到java。扩展了接口定义语言。所以我需要实现一个编译器,它可以生成java源文件。我对corba一无所知,我觉得很难开始。你认为我有可能在半年内完成这项工作吗?如果是这样,我该怎么办。ps:请原谅我的英语。如果你对解析器和解析器生成器一无所知,这将是一项艰巨的工作,但我认为如果你不从头开始,半年应该足够了 我建议您使用,它恰好有一个例子。这可能适用于较旧版本的Antlr,但这绝对是一个很好的起点。一定要抓住它,你会需要它的 对于您可以使

我需要实现一个idl到java编译器。事实上,它不是idl到java。扩展了接口定义语言。所以我需要实现一个编译器,它可以生成java源文件。我对corba一无所知,我觉得很难开始。你认为我有可能在半年内完成这项工作吗?如果是这样,我该怎么办。ps:请原谅我的英语。

如果你对解析器和解析器生成器一无所知,这将是一项艰巨的工作,但我认为如果你不从头开始,半年应该足够了

我建议您使用,它恰好有一个例子。这可能适用于较旧版本的Antlr,但这绝对是一个很好的起点。一定要抓住它,你会需要它的

对于您可以使用的代码生成部分,Antlr的作者Terence Parr编写的模板引擎正是为了这个目的


如果你真的要实现一个完整的ORB,那么不妨看看其他人是如何实现的,例如,..

一个真正的IDL到java不仅会将java代码映射回严格遵守OMG标准的IDL定义。它还生成Java代码,允许您的定义使用底层CORBA堆栈,这与为目标硬件体系结构生成指令的真正编译器不同

也就是说,一个IDL编译器

1获取IDL定义,并将其转换为CORBA堆栈,在Java中,这是您的案例中特定于语言的独立定义

2除此之外,它还生成CORBA堆栈/特定于供应商的代码

如果您所需要的只是做1的东西,那么它就不是真正意义上的IDL到Java编译器。但为了简单起见,我们可以这样称呼它

这里有两条可能的路线:

我从现有的基于Java的OpenOrb或JacOrb的CORBA堆栈中查看IDL编译器的源代码,或者

2查看OMG的规范,这些规范告诉您如何从IDL映射到您选择的语言:

这都是假设您了解编译器理论和实现。否则,如果这是一个学习实验,那就太好了!但如果这是有期限的工作的一部分,这可能是一项不现实的任务

不管怎样,祝你好运。

你可以使用idl4emf:

该项目由Xtext中的IDL语法实现和Ecore中的IDL元模型实现组成

此项目还包括来自IDL文件的代码生成器项目。只需在EclipseMF中编写Xpand模板,就可以从IDL文件实现自己的生成器


我已经成功地将这个项目作为几个生成器项目的一部分。

IDL是一种简化的C++,所以不应该造成很大的问题。然而,关键是生成的代码应该做什么。您希望实现一个完整的CORBA对象代理吗?这确实很难。我知道jdk中有一个名为idlj的编译器。我用它编译了一个简单的idl程序,它生成了很多java文件,比如helper、holder、POA、Stub之类的东西。这真把我弄糊涂了。如何生成这些额外的文件对我来说是个问题。@Sky Shaw:我更新了答案,加入了代码生成方面的建议。@Sky Shaw-如果你不懂CORBA,所有这些东西都会让你感到困惑。学习CORBA,更准确地说,学习OMG指定的IDL到Java映射。您只是不需要使用IDL并以任何我们想要的方式将其转换为java。有一个精确的规范要求如何将IDL工件映射到Java。此外,IDL编译器将生成特定于所讨论的orb的Java工件,因此它不仅仅是独立的IDL编译器。IDL编译器不是孤立存在的,而是作为CORBA堆栈的一部分,至少是ORB。为什么需要实现IDL-to-java编译器?为什么不使用现有的开源CORBA堆栈和IDL编译器呢?