关于JAVA编译器的各个阶段

时间:2015-06-29 12:33:13

标签: java compiler-construction

我有一个代码:

Int y=9

我想知道为什么编译器只在行Int中显示错误,为什么它没有同时显示两个错误,即如果我将int更正为display(23,1),然后它在htdocs > CakePHP > CakePHP中显示错误。我知道编译器分阶段工作,有人可以解释各个阶段和他们的工作,如果你能在一个例子的帮助下解释阶段,那么我将非常感激。我想知道如果在一个阶段发生错误,那么是否检查下一个连续阶段?

2 个答案:

答案 0 :(得分:2)

$ javac St.java
St.java:6: error: cannot find symbol
        Int y=9;
        ^
  symbol:   class Int
  location: class St
St.java:7: error: cannot find symbol
        display(23,1);
        ^
  symbol:   method display(int,int)
  location: class St
2 errors
$ javac -Xmaxerrs 1 St.java
St.java:6: error: cannot find symbol
        Int y=9;
        ^
  symbol:   class Int
  location: class St
1 error

本地使用JDK 1.7,使用JDK 1.8进行CodingGrouding,我遇到了两个错误。

如果我不得不猜测我会说它是特定于编译器的行为。有人可能会争辩说你不会同时修复所有错误,或者错误的变量声明可能会导致一堆误报,因此显示所有错误可能都不相关。

关于阶段,关于compilers提及的维基百科文章

  

词法分析,预处理,解析,语义分析   (语法导向的翻译),代码生成和代码优化

答案 1 :(得分:2)

在我上学期间完成了自定义编译器后,我发现一些编译器从上到下工作,这就是为什么我们首先得到最多的错误。在我的编译器类中,我们了解到编译器通过一次处理一个字符中的所有内容来工作。它可以检测到什么东西像Int y = 9;当它开始拾取(i-n-t)部分时。它知道或期望接下来的几个字符如“y”是变量后跟数字或分号。如果您想了解更多信息,我建议您阅读或查找特定的编译器以及它们的工作原理。他们如何解析.java文件或解析.cpp文件。希望它有所帮助