9

我正在为一个项目使用 Antlr v3 和 java,并且在 AntlrWorks 中一切顺利,但是当我切换到 Antlr IDE(eclipse 的插件)时,解释器无法匹配我写的句子,告诉我不匹配。在我看来,它无法识别我在词法分析器中指定的要跳过的单词列表。然而,它在 AntlrWorks 中完美运行是一样的。

有什么建议么?

我在eclipse中设置了antlr buider:Antlr Parser Generator v3.4

4

1 回答 1

20

这可能是配置问题。我在让一切正常工作时遇到了一些困难,所以没有找到任何地方可以做到这一点,我写了自己的文档。希望这可以帮助。

如何在 Eclipse Indigo 中安装 ANTLR IDE

使用 Indigo R2 和 IDE 2.1.2 测试

  1. 安装 Eclipse。
  2. 下载包含 ANTLR v2 的 ANTLR 完整二进制 jar。解压到临时目录。将 antlr-nn 文件夹复制到适当的永久位置,例如安装 Eclipse 的同一文件夹。
  3. 将 ANTLR IDE 更新站点添加到 Eclipse。
    • 在 Eclipse 中,单击帮助并选择安装新软件。
    • 单击添加... 按钮。
    • 在 Add Repository 窗口中,对于 Location 键入http://antlrv3ide.sourceforge.net/updates并键入类似 ANTLR IDE 作为 Name 并单击 OK 返回到 Available Software 窗口。
    • 选中 ANTLR IDE vn.nn 的复选框,然后单击直到安装完成。Eclipse 可能会重新启动。
  4. 配置 ANTLR IDE。
    • 在 Eclipse 主窗口中,单击 Window,然后单击 Preferences。
    • 在左窗格中,展开 ANTLR 并选择 Builder。
    • 在右窗格中,单击添加... 按钮。
    • 在 Add ANTLR Package 窗口中,单击 Directory... 并导航到 antlr-nn 文件夹的位置,然后单击 OK。
    • 单击“确定”关闭“添加 ANTLR 包”窗口。
    • 在左侧窗格中选择代码生成器,然后单击右侧窗格中的项目相关文件夹。键入文件夹名称。示例:antlr-java 或 antlr-generated。
    • 选择任何其他配置参数,但不要在“建筑”窗口的“常规”下检查 -nfa 或 -dfa。如果选中,这些将导致 ANTLR 错误,阻止在输出文件夹中生成 java 文件。
    • 单击“确定”关闭“首选项”窗口。
  5. 创建一个新的 Java 项目并启用 ANTLR 支持。
    • 在 Eclipse 主窗口中,转到 File、New、Java Project。单击下一步,键入项目名称并单击完成。
    • 要为项目启用 ANTLR 支持,请在 Package Explorer 窗口(左窗格)中右键单击刚刚创建的项目,然后选择 Configure、Convert to ANTLR project。
    • 将 ANTLR 完整 jar 文件添加到项目中:右键单击项目并选择 Properties,Java Build Path,单击 Add External JARs...,浏览到 ANTLR jar 文件,选择它,然后单击 OK。单击确定关闭项目属性窗口。
  6. 创建一个 ANTLR 语法。
    • 新建ANTLR语法:右键项目的src文件夹,然后File,New,Other,展开ANTLR,选择Combined Grammar。单击下一步,键入语法名称,选择语言选项,然后单击完成。
    • 使用选定的选项和空白规则创建一个“.g”文件。在顶部添加选项 language=Java、@header、@lexer::header 和 @members 语句(参见示例)。自动完成是添加这些最简单的方法(按 CTRL-空格键调出自动完成列表)。
  7. 保存语法。
    • 保存后,项目资源管理器中应该会出现一个包含为语法生成的 Java 代码的文件夹。如果没有,请确保未在“建筑”窗口的“常规”下的“ANTLR 首选项”中选中 -nfa 或 -dfa 选项(步骤 4g)。[确认是否需要这些:检查 CLASSPATH 环境变量指向与您的 Eclipse 安装(32 位或 64 位)匹配的 Java7,并且 Windows 路径环境变量具有 Java7 SDK。]
    • 为避免“无法解析为某个类型”Java 错误,请右键单击包含生成的 Java 代码的文件夹,然后单击构建路径,将其用作源文件夹。

示例组合语法

grammar test; //must match filename.g

options {
    language = Java;
}

@header { //parser
    package pkgName; //optional
    import java.<whatever you need>.*;
}

@members { //parser
    // java code here
}

@lexer::header { //lexer
    package pkgName; //optional
    import java.<whatever you need>.*;
}

@lexer::members {
    // java code here
}
/*------------------------------------------------------------------
 * PARSER RULES (convention is all lowercase)
 *------------------------------------------------------------------*/
parserule: LEXRULE;

/*------------------------------------------------------------------
 * LEXER RULES (convention is all uppercase)
 *------------------------------------------------------------------*/
LEXRULE: 'a'..'z';
于 2012-06-04T19:59:18.020 回答