gpt4 book ai didi

java - JFlex 和重音字符

转载 作者:行者123 更新时间:2023-11-29 09:02:28 25 4
gpt4 key购买 nike

我需要使用 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 字 rune 字

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

在 Linux 上,我更改了 LANG 环境变量以指定编码,例如C.UTF-8,并删除了警告。使用命令行选项 -Dfile.encoding=UTF-8 更具可移植性。我还找到了feature request 29 ,暗示 jFlex 遵循系统默认编码。

关于java - JFlex 和重音字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16571232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com