我知道Eclipse使用它自己的Java编译器(ECJ),它能够执行增量编译.从我发现的大多数读数来看,这个编译通常是由保存操作触发的,但这似乎与在输入单个单元/单词代码后几乎立即得到编译错误的错误反馈这一事实相匹配.我没有找到任何文档或文献说明这是什么粒度被触发(即每个单词,字母,行)?是否还有其他背景代码分析?虽然除了语法中的错误检测之外,我看不出它如何能够检测只能通过编译过程显示的语义错误.
编译器如何解释此switch语句?我假设switch语句中的内容是(41),为什么它会转到案例2?
int i = 4;
int j = 2;
switch(i++-j) { //switch is evaluted to be (41)??
case 3: i++; break;
case 1: j++; break;
case 2: j+=2; break;
case 5: i+=2; break;
default: i +=5; break;
}
System.out.println(i); //Prints out 4
System.out.println(j); //Prints out 5
Run Code Online (Sandbox Code Playgroud) 我有一段时间没有编程,所以我有点生疏了.我已经被困在这个问题上几个小时了,我想知道有什么选择可以选择在java中返回一些东西(或者当满足某个条件时跳回到调用方法 - 基本上doBranch方法使用parseStatementList等等.我在过去几个小时内以各种方式更改了parseStatementList,但这对于它可能无效的原因没有意义.
呼叫代码:[基本上是END,BLAH,BOO]在SKIP_START_SET中.然而,parseStatement将这些作为普通单词处理,因此如果BOO在字符串或某种类型的列表中,它将在第一个doBranch上丢失.
private C1 parseSelectStatement( TokenSet recoverSet) {
C2 selectCond = doBranch( recoverSet );
while (tokens.isMatch(BLAH)) {
match(BLAH)
C2 result = doBranch ( recoverSet );
}
if (tokens.isMatch(BOO)) {
match(boo)
result1 = doBranch( recoverSet );
}
match( END )
return new StatementNode.SelectNode(selectCond, result, result1);
}
private C2 doBranch(TokenSet recoverSet) {
ExpNode cond = parseCondition(recoverSet.union(Token.KW_THEN));
// The code jumps to below if words in SKIP_START_SET are found in the statement,
// otherwise it will complete and return the new …Run Code Online (Sandbox Code Playgroud)