【发布时间】:2013-05-15 17:18:06
【问题描述】:
我需要使用 JFlex 创建一个解析器,以从输入文件中提取所有单词,包括带有重音字符的单词,例如 á、é、í、ó、ú、ñ、...
我的问题是,即使将所有文件设置为 UTF8 编码和 %unicode 标签,我也无法让它识别这些字符。
.lex 文件是这样的:
import java_cup.runtime.*;
%%
%class ParserLex
%unicode
%public
%final
%cup
%init{
%init}
%{
private Symbol sym(int type) {
return sym(type, yytext());
}
private Symbol sym(int type, Object value) {
return new Symbol(type, yyline, yycolumn, value);
}
%}
Token = [áéíóú]
ANY = .
%%
{Token}
{ System.out.println(yytext()); }
{ANY}
{ }
而我的测试课是这样的:
class ParserTest {
public static void main(String[] args) throws IOException {
InputStreamReader reader = new InputStreamReader(new FileInputStream(args[0]), "UTF8");
ParserLex parser = new ParserLex(reader);
for (Symbol sym = parser.next_token(); sym.sym != 0; sym = parser.next_token()) {
}
reader.close();
}
}
关于这个问题有什么想法或建议吗?
【问题讨论】:
-
我将首先更改您的测试以使用 StringReader 以最大程度地减少某些操作系统字符集设置弄乱您的机会。否则,它对我来说看起来不错。您是否检查了生成的 .java 文件以查看可能出了什么问题?