可以用Javascript编写编译器吗?

Ale*_*ung 12 javascript compiler-construction

是否可以使用Javascript编写可以支持其他语言编写的编译器?

比方说,我有一段HTML.

<script language="cpp" id="cppScriptBlock" EntryPoint="main">
    int main() {
        cout << "<h1>CPPHeader</h1>";
    }
</script>

<script language="java" id="javaScriptBlock" EntryPoint="MyJavaClass">
    public class MyJavaClass {
        public final void main() {
            java.lang.System.out.println("<h1>JavaHeader</h1>");
        }
    }
</script>

<script language="csharp" id="csharpScriptBlock" EntryPoint="MyCSharpClass ">
    public class MyCSharpClass {
        public static void Main() {
            System.Console.WriteLine("<h1>CSharpHeader</h1>");
        }
    }
</script>


<script language="javascript">
    $("#cppScriptBlock").compileAndRun();
    $("#javaScriptBlock").compileAndRun();
    $("#csharpScriptBlock").compileAndRun();
</script>
Run Code Online (Sandbox Code Playgroud)

最后生成以下HTML

<h1>CPPHeader</h1>
<h1>JavaHeader</h1>
<h1>CSharpHeader</h1>
Run Code Online (Sandbox Code Playgroud)

可能吗?

亚历克斯

Rob*_*ben 18

是的,使用Jison非常有可能.

它根据您定义的语言结构生成JavaScript解析器.

Jison将无上下文语法作为输入,并输出能够解析该语法描述的语言的JavaScript文件.然后,您可以使用生成的脚本来解析输入,并根据输入接受,拒绝或执行操作.

- 来自文档

PS:CoffeeScript!也是用这个创建的.:)


ick*_*fay 7

是的,但是你需要做很多工作.就像真正的编译器一样,您必须解析代码,将其转换为中间代码等.之后,您必须模拟环境,包括这些语言中包含的所有运行时库.简而言之,它不实用,但它是可能的.


Pau*_*aul 7

是的,Javascript是Turing Complete.您可以使用任何语言编写代码中的任何内容.当然,这包括编译器.我无法想象有任何理由这样做过.如果你已经足够Javascript来编写编译器,你可能只想用javascript而不是其他语言编写代码.

  • 这就像告诉一个艺术家,如果他/她足够好画一幅画一幅猫的照片,他/她应该画一只猫.如果艺术家想画画,请让艺术家画画.只是不要试图告诉他们画什么. (3认同)
  • 同意您.实际上,我不打算这样做.我只对使用Javascript构建编译器的可能性感兴趣.这个想法是编程语言组合. (2认同)

wes*_*bos 1

你应该看看 JS 诱人的语言。具体如下: