我正在为实验室开发自己的解析器,并且我遇到了一些使用StreamTokenizer的奇怪行为。似乎任何被单引号包围的东西都会被跳过。
代码
StreamTokenizer st = new StreamTokenizer(new FileReader("input.txt"));
boolean eof = false;
do{
int i = 0;
int token = st.nextToken();
switch (token){
case StreamTokenizer.TT_EOF:
System.out.println("EOF");
eof = true;
break;
case StreamTokenizer.TT_EOL:
System.out.println("EOL");
break;
case StreamTokenizer.TT_WORD:
System.out.println("Word: " + st.sval);
break;
case StreamTokenizer.TT_NUMBER:
System.out.println("Number: " + st.nval);
break;
default:
System.out.println((char) token + " encountered.");
break;
}
} while (!eof);
输入:
top 'AT THE TOP' {
l 2{ window{Open Up} }
}
输出:
Word: top
' encountered.
{ encountered.
Word: l
Number: 2.0
{ encountered.
Word: window
{ encountered.
Word: Open
Word: Up
} encountered.
} encountered.
} encountered.
EOF
我注意到我可以使用以下方法设置引号:
st.quoteChar('\'');
我认为这将允许我设置引号char,如果遇到,下一个标记将是下一个引用char之前的所有内容。
不幸的是,这并没有像我想的那样奏效,现在我被卡住了。