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

ANTLRWorks 1.4.3 can';无法正确读取扩展ASCII字符,antlr,antlrworks,Antlr,Antlrworks,我正在从事一个相当标准的编译器项目,为此我选择了ANTLR作为解析器生成器。在将现有语法从v2更新到v3时,我注意到ANTLRWorks(ANTLR的官方IDE)没有正确显示文件中的任何扩展ASCII字符。即使使用Notepad++将文件从ASCII转换为UTF8,它仍然将这些字符显示为正方形。在记事本++中,它们显示良好 由于此故障意味着ANTLRWorks在保存文件时会破坏文件,因此我无法再将其用作编辑器,这相当烦人。这里有没有其他人遇到过这个问题,也许已经解决了?非常感谢 [编辑]:最新版

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

由于此故障意味着ANTLRWorks在保存文件时会破坏文件,因此我无法再将其用作编辑器,这相当烦人。这里有没有其他人遇到过这个问题,也许已经解决了?非常感谢


[编辑]:最新版本的AntlWorks(昨天下载)出现了具体问题,而我从

获得的vams.g语法文件无法在AntlWorks 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字符

这是上述语法的ANTLRv3版本:(语法太大,无法发布在上面…)

编辑二
除了给它一个标签,语法名称还有什么用处吗

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

ANTLR中有4种语法类型:

  • 组合语法,看起来像
    语法T
    ,生成
    TLexer.java
    TParser.java
    源文件
  • 语法分析器,看起来像
    语法分析器TP
    ,生成
    TP.java
    源文件
  • lexer语法,看起来像
    lexer语法TL
    ,生成
    TL.java
    源文件
  • 树语法,看起来像
    tree-grammar-TWalker
    ,生成
    TWalker.java
    源文件

我编辑了这个问题,添加了一个指向我正在修改的特定语法文件的链接。请尝试用它重现问题:)谢谢你,巴特:)我将粘贴复制到记事本++中的一个文件中,保存后我可以在AntlWorks中打开它而不会出现问题。我将尝试重新添加其他部分(选项、标题),看看效果如何。不确定我们是否能弄清楚到底是什么导致了这个问题,不过。。。这似乎与ANTLRWorks处理文件的方式有关。顺便问一下:为什么ANTLWorks会将VAMS标记为“无效语法名”?编辑:哦,似乎语法和文件名必须匹配:)@MayaPosch,不客气。如果您将自己命名为grammar而不是
VAMS.g
,AntlWorks会抱怨它的名称:一个组合的
grammar X
(包括解析器和词法规则),必须命名为
X.g
。语法名称除了给它一个标签之外还有什么用处吗?太棒了,非常感谢:)我将额外的内容放回语法文件,并在没有任何中断的情况下重新启用自定义位。