ANTLRWorks 1.4.3无法正确读取扩展ASCII字符

时间:2011-12-03 23:41:53

标签: antlr antlrworks

我正在研究一个相当标准的编译器项目,我选择ANTLR作为解析器生成器。在将现有语法从v2更新到v3时,我注意到ANTLR的官方IDE ANTLRWorks没有正确显示文件中的任何扩展ASCII字符。即使在使用Notepad ++将文件从ASCII转换为UTF8之后,它仍然将这些字符显示为正方形。在Notepad ++中,它们显示正常。

由于这个故障意味着ANTLRWorks在保存文件时会将文件归档,我不能再将其用作编辑器了,这很烦人。这里有没有其他人遇到这个问题,也许解决了吗?很有责任。

[编辑]:特定问题出现在最新版本的ANTLRWorks(昨天下载)和我从http://www.antlr.org/grammar/1086696923011/vhdlams/index.html获得的vams.g语法文件

1 个答案:

答案 0 :(得分:2)

我无法使用ANTLRWorks 1.4.3重现这一点。

如果我创建一个虚拟语法:

grammar T;
parse : . ;
Any   : . ;

并将完整的扩展ASCII集粘贴在多行注释中:

grammar T;

/*
€

‚
ƒ

...

ÿ
*/

parse : . ;
Any   : . ;

没问题。如果我使用ANTLRWorks或普通编辑器复制字符并使用ANTLRWorks编辑现有语法并不重要:保存在ANTLRWorks中后,所有字符都保持不变。

相关说明:ANTLR 3.0到3.3版本仍然与ANTLR 2.7类有一些依赖关系,这可能导致org.antlr.Tool跳过ASCII集之外的某些字符。在这种情况下使用ANTLR 3.4,它不再具有这些旧的依赖关系了。

修改

我怀疑原始语法中有一些奇怪的字节导致了所有的混乱。我很快就复制了原始语法中的规则,将所有v2.7语法更改为v3语法(将双引号文字更改为单引号文字,protected变为fragment并注释了一些自定义代码)并保存了它在一个新文件中。该文件可以由ANTLRWorks或纯文本编辑器打开(并保存),而不会导致扩展的ASCII字符错误。

以下是所述语法的ANTLR v3版本:http://pastebin.com/zU4xcvXt(语法太大,无法在SO上发布...)

编辑II

  

除了给它贴上标签之外,语法名称是否有用?

不,不是。正如您所提到的,它只是用于为解析器或词法分析器提供名称。

ANTLR中有4种类型的语法:

  • 组合语法,看起来像grammar T;,生成TLexer.javaTParser.java源文件;
  • 解析器语法,看起来像parser grammar TP;,生成TP.java源文件;
  • lexer语法,看起来像lexer grammar TL;,生成TL.java源文件;
  • 树语法,看起来像tree grammar TWalker,生成TWalker.java源文件。