2008-12-03 106 views
3

我试图确定以下想法的现有技术:可运行的伪代码?

1)某些代码中的用户键入一种名为(insert_name_here)的语言;

2)用户从众所周知的输出候选列表(javascript,ruby,perl,python)中选择一个目标语言; 3)处理器将insert_name_here翻译成目标语言的可运行代码;

4)所述处理器然后运行使用基于所选择的语言相关的系统调用的代码

这工作的原因是因为有预先建立从insert_name_here所有语言构造之间1对1映射到所有支持的目标语言。

免责声明:这显然不会产生符合目标语言的“优雅”代码,它只是一个可运行的基本翻译,目的是让开发人员快速获得 - 对于那些他们不想重新发明轮子但是因为任何原因需要在特定项目中使用特定语言而需要的几种不同语言的算法的自然实现)。

这是否已经存在?

回答

2

有转换器可用于不同的语言。你将面临的问题是与图书馆打交道。虽然语言语句之间的映射可能很容易,但查找库函数之间的映射将非常困难。

我不太确定这种类型的代码生成器是多么有用。你为什么要用一种语言写一些东西,然后立即将它转换成其他东西?我可以看到将图表或模型转换为代码的第四代语言的基本原理,但我并没有真正看到您的努力点。

4

.NET CLR的设计使C++ .Net,C#.Net和VB.Net都可以编译为相同的机器语言,并且可以将CLI反编译成任何一种语言。

所以,我会说它已经存在,虽然不完全如你所描述。

+1

事实上,红门的反射器工具,你可以轻松地转换语言。 – 2008-12-03 22:00:41

2

这似乎有点奇怪。如果您以最常见的形式使用术语“现有技术”,那么您正在讨论一个可能获得专利的想法。如果的情况下,你必须:

1 /出版的想法,开始对专利申请运行时钟 - 我猜想,也许是不正确的,那你总部设在美国其他国家也可能有其他规则。

2 /告诉整个星球你的想法,这意味着它几乎没用,试图申请专利,除非你的行动非常快。

如果您没有考虑将此专利考虑在内,并且只是在非专业人士的意义上使用术语“现有技术”,我表示歉意。我为一家非常重视专利的公司工作,它非常详细地介绍了我们在提交信息之前可以处理的信息。

话虽如此,可专利的想法必须是新颖的,有用的和不明显的。我认为你的想法不会通过第三个,因为你正在描述一个语言翻译器,它将具有许多pascal-to-c和fortran-to-c转换器的现有技术。

希望的一线希望是您的想法能够产生多种输出语言之一(p2c和f2c不会这样做),但我认为即使这种能力会被类似于交叉编译器(例如gcc)将源代码转换成许多不同的对象语言之一。

IBM有一款名为Visual Age Generator的产品,您可以使用一种(专有)语言编写代码,并将其转换为COBOL/C/Java /其他语言,以便从PC到不同的目标平台上运行到大型的System z大型机,所以这是你的第一个问题(考虑将全球最大的专利代理商IBM已经在使用的想法申请专利)。

2

吨。 p2c,f2c以及C++和Objective C的原始实现都立即引起我的注意。除此之外,很难区分你从任何编译器所描述的内容,特别是对于我们的编译器生成ASM代码以实现中间表示的老人。

3

是的,一个程序将程序从一个表示转换为另一个表示确实存在。它被称为“编译器”。

至于你的问题是否永远有可能:只要你的目标语言至少与源语言一样强大,那么这是可能的。所以,如果你的目标语言是图灵完整的,那么它总是可能,因为没有比图灵完全语言更强大的语言。

但是,并不需要哑巴1:1映射。

例如:将CIL字节码编译为JavaScript源代码的Microsoft Volta编译器存在问题:.NET有线程,JavaScript没有。但是你可以用延续来实现线程。那么,JavaScript也没有延续,但你可以实现延续与例外。所以,Volta将CIL转换为CPS,然后以例外的方式实现CPS。 (较新版本的JavaScript具有发生器形式的半协同程序;也可以使用这些程序,但Volta打算跨多种JavaScript版本工作,包括Internet Explorer中的显然JScript。)