ANTLRWorks 1.4.3 can';无法正确读取扩展ASCII字符
我正在从事一个相当标准的编译器项目,为此我选择了ANTLR作为解析器生成器。在将现有语法从v2更新到v3时,我注意到ANTLRWorks(ANTLR的官方IDE)没有正确显示文件中的任何扩展ASCII字符。即使使用Notepad++将文件从ASCII转换为UTF8,它仍然将这些字符显示为正方形。在记事本++中,它们显示良好 由于此故障意味着ANTLRWorks在保存文件时会破坏文件,因此我无法再将其用作编辑器,这相当烦人。这里有没有其他人遇到过这个问题,也许已经解决了?非常感谢ANTLRWorks 1.4.3 can';无法正确读取扩展ASCII字符,antlr,antlrworks,Antlr,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
VAMS.g
,AntlWorks会抱怨它的名称:一个组合的grammar X
(包括解析器和词法规则),必须命名为X.g
。语法名称除了给它一个标签之外还有什么用处吗?太棒了,非常感谢:)我将额外的内容放回语法文件,并在没有任何中断的情况下重新启用自定义位。