首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >antlr 4 iso-8859-15编码文件匹配包含\u0161š的字符串

antlr 4 iso-8859-15编码文件匹配包含\u0161š的字符串
EN

Stack Overflow用户
提问于 2016-01-28 17:28:29
回答 2查看 401关注 0票数 2

我有这样的语法:

代码语言:javascript
复制
KEY
: [a-zA-Z\u0160\u0161\u00C0-\u00FF][a-zA-Z_0-9\-\''\u0160\u0161\u00C0-\u00FF]* 
;

读取ISO-8859-15编码的文本文件

代码语言:javascript
复制
new ANTLRFileStream(fileName, "ISO-8859-15")

使用字符串Milešovka。为什么š会出现令牌识别错误?

跟踪:

代码语言:javascript
复制
 line 110:6 token recognition error at: ''exit    field, LT(1)={

编辑:我使用的是antlr 4.5.1 (并且已经测试了4.4 --同样的问题)。

EN

回答 2

Stack Overflow用户

发布于 2016-01-28 18:48:43

我认为问题可能出在你用来生成解析器的方式上。我不确定到底会出什么问题,但我设法用你的符号做了一个工作示例,它使用maven生成语法。

pom.xml

代码语言:javascript
复制
<build>
    <plugins>
        <plugin>
            <groupId>org.antlr</groupId>
            <artifactId>antlr4-maven-plugin</artifactId>
            <version>4.5</version>
            <configuration>
                <outputDirectory>src/main/java</outputDirectory>
                <listener>false</listener>
                <visitor>true</visitor>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>antlr4</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.0</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
    </plugins>
</build>

<dependencies>
    <dependency>
        <groupId>org.antlr</groupId>
        <artifactId>antlr4-runtime</artifactId>
        <version>4.5.1</version>
    </dependency>
</dependencies>

LexerGrammar.g

代码语言:javascript
复制
lexer grammar TestLexer;

LBR: '[';
RBR: ']';
KEY
: [a-zA-Z\u0160\u0161\u00C0-\u00FF][a-zA-Z_0-9\-\''\u0160\u0161\u00C0-\u00FF]*
;

ParserGrammar.g

代码语言:javascript
复制
parser grammar TestParser;

options { tokenVocab=TestLexer; }

rul   : block+ ;
block  : LBR KEY RBR ;

完整的示例代码是here

票数 0
EN

Stack Overflow用户

发布于 2016-01-28 19:36:26

Ira Baxter的评论回答了这个问题:

ANTLRFileStream总是向词法分析器提供Unicode字符流吗?那么\u0161可能是正确的,或者这种编码只是告诉它读取8位字节的一种方式,而不需要解释它们?则\u00a8将是“š”的正确代码。

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

https://stackoverflow.com/questions/35057546

复制
相关文章

相似问题

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