我有这样的语法:
KEY
: [a-zA-Z\u0160\u0161\u00C0-\u00FF][a-zA-Z_0-9\-\''\u0160\u0161\u00C0-\u00FF]*
;读取ISO-8859-15编码的文本文件
new ANTLRFileStream(fileName, "ISO-8859-15")使用字符串Milešovka。为什么š会出现令牌识别错误?
跟踪:
line 110:6 token recognition error at: ''exit field, LT(1)={编辑:我使用的是antlr 4.5.1 (并且已经测试了4.4 --同样的问题)。
发布于 2016-01-28 18:48:43
我认为问题可能出在你用来生成解析器的方式上。我不确定到底会出什么问题,但我设法用你的符号做了一个工作示例,它使用maven生成语法。
pom.xml
<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
lexer grammar TestLexer;
LBR: '[';
RBR: ']';
KEY
: [a-zA-Z\u0160\u0161\u00C0-\u00FF][a-zA-Z_0-9\-\''\u0160\u0161\u00C0-\u00FF]*
;ParserGrammar.g
parser grammar TestParser;
options { tokenVocab=TestLexer; }
rul : block+ ;
block : LBR KEY RBR ;完整的示例代码是here
发布于 2016-01-28 19:36:26
Ira Baxter的评论回答了这个问题:
ANTLRFileStream总是向词法分析器提供Unicode字符流吗?那么\u0161可能是正确的,或者这种编码只是告诉它读取8位字节的一种方式,而不需要解释它们?则\u00a8将是“š”的正确代码。
https://stackoverflow.com/questions/35057546
复制相似问题