如何创建语言规范



我想问一下,java写了什么,但是我在stackexchange上找到了答案规格,但JDK用C 。

编写

现在,我的问题是,如果JDK用C编写,Java基本上是C语言的另一种形式,例如扩展名或其他内容,并添加了更多功能?该规范是如何创建的,这三件事之间的关系是什么:

  • 解释规范的工具(例如JDK(
  • 规范本身
  • 该工具创建的语言。

我认为您正在误解一些事情,所以让我们先转到基础知识:

计算机程序不过是由处理器读取然后执行的一组指令。一个一个一个一个任务的列表。

Java使用称为Java运行时环境(JRE(的东西。JRE是(不是完全(的虚拟处理器,其自己的指令集称为Java字节代码。此"虚拟处理器"在操作系统内部运行。

Java运行时环境用某种语言编写。Sun JRE用C编写。C代码依次将其编译到您的真实处理器的机器代码中(因此您的处理器理解(。

Java被编译到Java字节代码中。

回答您的问题:规范不过是对Java编程语言的表现以及其外观的描述。基本上是一个常规的文本文档,您可以用Word之类的文字写。

使用此规范的程序员可以构建编译器。编译器是一个更改Java代码的程序:

for (int i = 2; i < 1000; i++) {
    for (int j = 2; j < i; j++) {
        if (i % j == 0)
            continue outer;
    }
    System.out.println (i);
}

看起来像这样的字节码

0:   iconst_2
1:   istore_1
2:   iload_1
3:   sipush  1000
6:   if_icmpge       44
9:   iconst_2
10:  istore_2
11:  iload_2
12:  iload_1
13:  if_icmpge       31
16:  iload_1
17:  iload_2
18:  irem
19:  ifne    25
22:  goto    38
25:  iinc    2, 1
28:  goto    11
31:  getstatic       #84; // Field java/lang/System.out:Ljava/io/PrintStream;
34:  iload_1
35:  invokevirtual   #85; // Method java/io/PrintStream.println:(I)V
38:  iinc    1, 1
41:  goto    2
44:  return

可以用任何语言编写的编译器程序,但是建议将其写入C 等低级语言,以使编译过程更快。

最新更新