【发布时间】:2012-02-04 17:04:48
【问题描述】:
用 Java 编写 .java 源文件的词法分析器。我有一个字符流,我试图让词法分析器跳过单行 cmets。
我遍历每个字符,我的假设是应该可以首先检测注释的 //,然后跳过后续字符,直到下一个换行符。但它不起作用,我无法检测到任何换行符。这是我的代码:
//is it a single line comment?
if(currentChar == '/') {
//loop through char:s until next new line
while(inComment == true) {
//increment loop
i++;
//extract next char
currentChar = stringInput.charAt(i);
//check if current character is a new line
if(( currentChar == '\n' ) || ( currentChar == '\r' )) {
inComment = false;
System.out.println("End Of Line Comment.");
}
}
}
那么,.java 源文件有换行符吗?是否可以使用 Character 类或任何其他方式检测它们?
非常感谢!
解决方案:
在使用 BufferedReader 从 .java 源文件中读取代码并将行附加到 StringBuilder 时,新行字符似乎丢失了。问题是通过使用 org.apache.commons.io.FileUtils 中的 readFileToString() 读取 .java 文件来解决的,这很有效!
【问题讨论】:
-
你在哪里设置 inComment 为 true ?它应该在 if(currentChar == '/') 部分之后。
-
我更早地检查了 /。然后我再次检查另一个 / 或 * 以区分块和单行 cmets。但你是对的,谢谢。
标签: java parsing line new-operator lexer