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