1

我正在尝试在具有本地 EBCDIC 字符集的系统上使用 ANTLR 3.1.3

即使是这样的简单语法:

lexer grammar test;

GENERIC_ID
: (LETTER)*
;

fragment LETTER
: 'a' .. 'z'
;

在初始编译期间导致这些错误(java org.antlr.Tool test.g):

error(10):  internal error: problem parsing group <unknown>: line 1:1: unexpected char: 0x7 : line 1:1: unexpected char: 0x7
org.antlr.stringtemplate.language.GroupLexer.nextToken(GroupLexer.java:233)
antlr.TokenBuffer.fill(TokenBuffer.java:69)
antlr.TokenBuffer.LA(TokenBuffer.java:80)
antlr.LLkParser.LA(LLkParser.java:52)
antlr.Parser.match(Parser.java:210)
org.antlr.stringtemplate.language.GroupParser.group(GroupParser.java:120)
org.antlr.stringtemplate.StringTemplateGroup.parseGroup(StringTemplateGroup.java:792)
org.antlr.stringtemplate.StringTemplateGroup.<init>(StringTemplateGroup.java:274)
org.antlr.stringtemplate.PathGroupLoader.loadGroup(PathGroupLoader.java:67)
org.antlr.stringtemplate.StringTemplateGroup.loadGroup(StringTemplateGroup.java:969)
org.antlr.stringtemplate.StringTemplateGroup.loadGroup(StringTemplateGroup.java:955)
org.antlr.codegen.CodeGenerator.loadTemplates(CodeGenerator.java:198)
org.antlr.codegen.CodeGenerator.genRecognizer(CodeGenerator.java:292)
org.antlr.Tool.generateRecognizer(Tool.java:607)
org.antlr.Tool.process(Tool.java:429)
org.antlr.Tool.main(Tool.java:91)
error(10):  internal error: test.g : java.lang.IllegalArgumentException: Can't find template outputFile.st; group hierarchy is [null]
org.antlr.stringtemplate.StringTemplateGroup.lookupTemplate(StringTemplateGroup.java:507)
org.antlr.stringtemplate.StringTemplateGroup.getInstanceOf(StringTemplateGroup.java:392)
org.antlr.stringtemplate.StringTemplateGroup.getInstanceOf(StringTemplateGroup.java:404)
org.antlr.codegen.CodeGenerator.genRecognizer(CodeGenerator.java:314)
org.antlr.Tool.generateRecognizer(Tool.java:607)
org.antlr.Tool.process(Tool.java:429)
org.antlr.Tool.main(Tool.java:91)

语法文件似乎得到了适当的处理,但似乎内部的某些东西导致了一些问题。无论我在语法文件中使用什么字符,非法字符似乎总是 0x7。

我不能在具有本地 EBCDIC 字符集的系统上编译 ANTLR 吗?有什么建议么?

更新:看来问题在于模板文件(.stg 文件)。如果我将 codegen/templates 目录中的文件转换为 EBCDIC(也是 ANTLRCore.sti),那么编译似乎完成了。有没有办法告诉 java/antlr 不要以本地编码读取这些文件?或者这些模板文件是否可以在其他编码中使用?否则我被迫手动转换并更换每一个

4

0 回答 0