识别不同语言并将它们发送到相应编译器的编译器。可能?

时间:2010-01-05 17:14:39

标签: language-agnostic compiler-construction programming-languages compiler-development

我在想是否可以将asp.net,php和java连接成一个页面。

其实我现在不需要任何这样的东西。由于某些语言的某些功能很好而且某些功能或其他一些语言都很好,所以这只是一个想法让我心动不已,所以如果我将所有这些功能合并为一个,我就会想到什么

我的意思是,我正在创建一个包含所有3种语言asp.net php和java的代码的页面。

<asp code></asp code>
<php code></php code>
<java code></java code>

<html>
    <asp code>
    <php code></php code>
    <java code></java code>
    </asp code>
</html>

或类似的编译器识别不同的代码段并将它们发送到其编译器上运行以执行。并且输出可以被XML中的其他语言识别和使用

我不是说所有语言都互相交流。虽然他们可以通过XML互相交流。但我只是说该文件被编译为具有不同编程语言代码的单个实体,这些代码被发送到各自的编译器以执行并最终返回到父编译器

我正在考虑一个可以开发的编译器,它可以识别不同的语言代码并将它们发送到编译器,如.net框架所做的那样,例如MSIL

6 个答案:

答案 0 :(得分:5)

有可能吗?

引用“辛普森一家”中的牧师Lovejoy“简短的回答no with if。很长的回答是的,有一个但是。”

,目前无法如果您使用当前可用的技术。

它要求您滚动自己的服务器作为填充程序,拆分代码的不同部分并将它们发送到必需的语言解析器+编译器,然后将这些单独的部分重新组合在一起以显示页面。

修改 @Shantanu:我很高兴。实施完全由你决定,因为我根本没有调查这样的事情。

最终我觉得这不是最有成效的事情,因为你可能会遇到很多问题。

最大的存在: 一种语言的代码不会概述其他语言的内容。

即。如果你的ASP中有一个用值定义的变量,那么Java或PHP版本就不会毫不费力地意识到它,更不用说它们完全无法从彼此的进程中访问内存。

但是,如果你想沿着这条路走下去,我建议你研究一下像ANTLR这样的解析器生成器。它将帮助您编写一个可以查找特殊标记的解析器(注意,如果需要,可以使用正则表达式或手动解析器完成)。

一旦你有了分割代码,你就会希望将它发送给每种语言的编译器,你应该能够从中接收文本输出。一旦你有了这个文本,它应该是所有html + javascript,然后可以将它们组合在一起以显示页面。

我会说如果你想让3种语言互动,你将会创建一个巨大的项目。使用.Net框架并为其编写PHP和JAVA(可能已经存在)语言可能更容易,允许您放弃创建整个服务器堆栈。

答案 1 :(得分:1)

不是,不。脚本是服务器端,整个文件将依次传递给每个服务器(asp.net/php/java),我相信其他代码会导致解析错误。

这也是非常低效的。

答案 2 :(得分:0)

我使用ajax混合了语言。在你的情况下它可能有意义,但你没有提供足够的细节。

答案 3 :(得分:0)

虽然不是我认为你想到的,但生成包含多个客户端语言的页面很简单。只需为脚本标记定义不同的type属性,例如:

<html>
    <script type="text/javascript">...</script>
    <script type="text/vbscript">...</script>
    <script type="text/someothersupportedscript">...</script>

    <body>
        ...
    </body>
</html>

另一方面,如果你想在服务器端使用不同的语言生成HTML - 当然,它是可能的但是我不知道任何框架会使这一切变得容易。问题是,几乎每个生成页面的服务器端库都希望根据HTTP响应的内容形成一个完整的HTML页面。

最简单的方法可能是将一种语言指定为“主要”,让其实际生成网页 - 然后让它进行外部调用,最终提供由其他人生成的页面部分语言(以及将它们拼接在一起的逻辑)。这些调用可以是直接进程调用,带包装器的RMI,Web服务调用(到本地或远程主机)等。

仍然 - 我真的不确定你为什么要这样做。 : - )

答案 4 :(得分:0)

ESI

http://www.akamai.com/html/support/esi.html

本质上,页面是在一系列图块中构建的。 Oracle在其网络摄像头产品中实现了这一点,但它足以让你自己编写一个解析器。

下进行。

答案 5 :(得分:0)

我认为必须设计一个新的编译器来识别基于某些标记的不同源代码

<aspX> - 表示asp.net
<php> - 表示php
<C#X> - C#代码

像这样 当这个编译器看到这段代码时

它应该将相应的代码发送给它的编译器。

例如

<aspX>
<asp: Textbox....../>
<C#X>
xyz=abc();
</C#X>
</asp>

类似的东西