安装和设置

如何在 Eclipse 中安装 ANTLR

(最后在 Indigo 和 ANTLR 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 的名称,然后单击 OK 返回 Available Software 窗口。
    • 选中 ANTLR IDE vn.nn 的复选框,然后单击直到它安装完毕。Eclipse 可能会重启。
  4. 配置 ANTLR IDE。
    • 在 Eclipse 主窗口中,单击 Window,然后单击 Preferences。
    • 在左侧窗格中,展开 ANTLR 并选择 Builder。
    • 在右侧窗格中,单击“添加…”按钮。
    • 在 Add ANTLR Package 窗口中,单击 Directory …并导航到 antlr-nn 文件夹的位置,然后单击 OK。
    • 单击确定关闭“添加 ANTLR 包”窗口。
    • 在左窗格中选择 Code Generator,然后单击右窗格中的 Project relative 文件夹。输入文件夹名称。示例:antlr-java 或 antlr 生成的。
    • 选择任何其他配置参数,但不要在构建窗口的常规下检查 -nfa 或 -dfa。如果选中,则会导致 ANTLR 错误,从而阻止在输出文件夹中生成 java 文件。
    • 单击确定关闭首选项窗口。
  5. 创建一个新的 Java 项目并启用 ANTLR 支持。
    • 在 Eclipse 主窗口中,转到 File,New,Java Project。单击 Next,键入项目名称,然后单击 Finish。
    • 要为项目启用 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,@ ierer::header 和 @members 语句(参见示例)。自动完成是添加这些内容的最简单方法(按 CTRL 空格以显示自动完成列表)。
  7. 保存语法。
    • 保存后,包含生成的语法 Java 代码的文件夹应出现在 Project Explorer 中。如果没有,请确保未在构建窗口中常规下的“ANTLR 首选项”中选中 -nfa 或 -dfa 选项(步骤 4g)。 [确认是否需要这些:检查 CLASSPATH 环境变量指向与 Eclipse 安装(32 位或 64 位)匹配的 Java7,Windows Path 环境变量是否具有 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';