Java JFlex和重音字符

Java JFlex和重音字符,java,encoding,utf-8,jflex,Java,Encoding,Utf 8,Jflex,我需要用JFlex创建一个解析器,从输入文件中提取所有单词,包括带有重音字符的单词,如á、é、í、ó、ú、ñ、 我的问题是,即使使用UTF8编码和%unicode标记设置所有文件,我也无法让它识别这些字符 .lex文件如下所示: import java_cup.runtime.*; %% %class ParserLex %unicode %public %final %cup %init{ %init} %{ private Symbol sym(int type) {

我需要用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();
    }
}

关于这个问题有什么想法或建议吗?

我最近发现jFlex输出的错误如下

Warning in file "scanner.jflex" (line 42):
Rule can never be matched:
"???"  { return new Symbol(Symbols.CIRCLED_MINUS, 1, yycolumn + 1, null); }
对于我的UTF-8字符文本

"⊖"  { return new Symbol(Symbols.CIRCLED_MINUS, 1, yycolumn + 1, null); }

在Linux上,我更改了
LANG
环境变量以指定编码,例如
C.UTF-8
,从而删除了警告。使用命令行选项
-Dfile.encoding=UTF-8
更便于携带。我还发现,这暗示jFlex尊重系统默认编码。

我将首先更改您的测试,使用StringReader,以尽量减少操作系统字符集设置打乱您的机会。否则,我觉得不错。您是否检查了生成的.java文件以查看可能出现的问题?