我正在开发一个相当标准的编译器项目,我选择 ANTLR 作为解析器生成器。在将现有语法从 v2 更新到 v3 时,我注意到 ANTLRWorks(ANTLR 的官方 IDE)无法正确显示文件中的任何扩展 ASCII 字符。即使使用 Notepad++ 将文件从 ASCII 转换为 UTF8 后,它仍然将这些字符显示为正方形。在 Notepad++ 中它们显示得很好。
由于这个故障意味着 ANTLRWorks 在我保存文件时会损坏该文件,因此我无法再将其用作编辑器,这相当烦人。这里还有其他人遇到过这个问题并且可能已经解决了吗?多谢。
[edit]:特定问题出现在最新版本的 ANTLRWorks(昨天下载的)和我从 获取的 vams.g 语法文件中http://www.antlr.org/grammar/1086696923011/vhdlams/index.html http://www.antlr.org/grammar/1086696923011/vhdlams/index.html
我无法使用 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,它不再具有这些旧的依赖项。
EDIT
我怀疑原始语法中的某个地方有一些奇怪的字节导致了所有的混乱。我很快只复制了原始语法中的规则,将所有 v2.7 语法更改为 v3 语法(将双引号文字更改为单引号文字,protected
became fragment
并评论了一些自定义代码)并将其保存在新文件中。该文件可以由 ANTLRWorks 或纯文本编辑器打开(并保存),而不会导致其损坏扩展 ASCII 字符。
这是该语法的 ANTLR v3 版本:http://pastebin.com/zU4xcvXt http://pastebin.com/zU4xcvXt(语法太大,无法发布在SO上......)
EDIT II
除了给它一个标签之外,语法名称还有其他用处吗?
不,这不对。正如您所提到的,它仅用于为解析器或词法分析器提供名称。
ANTLR中有4种语法:
- 组合语法,看起来像
grammar T;
,生成TLexer.java
and TParser.java
源文件;
- 解析器语法,看起来像
parser grammar TP;
,生成一个TP.java
源文件;
- 词法分析器语法,看起来像
lexer grammar TL;
,生成一个TL.java
源文件;
- 树语法,看起来像
tree grammar TWalker
,生成一个TWalker.java
源文件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)