我正在写一个词法分析器。我有一个开关结构,这是该区域所在位置的代码片段。
//whitespace
case ' ':
case '\t':
case '\n':
consume(); System.out.println("consumed ws");
break;
//identifier
default:
if (isLetter()) {
consume();
state = 8;
} else {
System.out.println("invalid character: " + look);
}
break;
问题是,尽管它将正确使用空格和制表符,但不会使用换行符,而是使用默认值。
我在其他地方与“ \ n”进行了比较,它们工作正常。例如,如果注释掉一行,则此代码将执行:
case 10:
while(look != '\n'){
consume();
}
consume();
state = 0;
break;
因此,当它位于switch结构中时,似乎只是一个错误,而不是if或while语句。但是,如果我在默认情况下添加了一些东西来处理换行符,即使我打印出了外观,也求值(look =='\ n')为true,并且确实在输出中创建了新行。
最佳答案
您正在使用MS Windows吗?如果是,则Windows中的结束行为\r\n
。但是在Linux中,您的程序应该可以。
您应该忽略\r
字符,而为\r
添加另一种情况则什么也不做!