首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JFlex和重音字符

JFlex和重音字符
EN

Stack Overflow用户
提问于 2013-05-16 01:18:07
回答 1查看 1.1K关注 0票数 2

我需要用JFlex创建一个解析器来从输入文件中提取所有单词,包括那些带有重音字符的单词,如a,é,í,ó,u,ñ,...

我的问题是,即使用UTF8编码和%unicode标记设置所有文件,我也不能让它识别这些字符。

.lex文件如下所示:

代码语言:javascript
复制
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}
    {   }

我的测试类是这样的:

代码语言:javascript
复制
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();
    }
}

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-01 15:35:27

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

代码语言:javascript
复制
Warning in file "scanner.jflex" (line 42):
Rule can never be matched:
"???"  { return new Symbol(Symbols.CIRCLED_MINUS, 1, yycolumn + 1, null); }

对于我的UTF-8字符文字

代码语言:javascript
复制
"⊖"  { return new Symbol(Symbols.CIRCLED_MINUS, 1, yycolumn + 1, null); }

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16571232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档