java - 为什么我的 Java ANTLR 语法文件没有编译?

标签 java eclipse antlr antlrworks

我得到了 Java 编译器子集(称为静态 Java 编译器)的 ANTLR 语法。我正在尝试扩展语法以包含更多 Java 功能,例如,我刚刚添加了 For Loops 的语法。

使用 Eclipse 和 ANTLR 插件,然后我做了“编译 ANTLR 语法”。它没有编译,而是在代码的第一位产生了两个错误:

grammar ExtendedStaticJava;

options { backtrack=true; memoize=true; }

@header
{
package sjc.parser.extended;
import java.math.BigInteger;

/**
 * Extended StaticJava parser.
 * @author <myname>
 */
}

// the rest of the grammar has been excluded.

第一个错误在第 1 行:'Unexpected Token: grammar' 第二个错误在第 5 行:'Unexpected char: @'

为什么它不能识别这个基本的 ANTLR 语法?我的第一个想法是我在类路径中遗漏了一些东西,但我转到项目的属性并确保以下 JAR 包含在下:

  • antlr-2.7.7.jar
  • stringtemplate-3.2.1.jar
  • antlr.jar
  • antlr-runtime-3.0.1.jar

有什么想法或建议吗?

最佳答案

antlr-2.7.7.jar 是错误的:您的语法是 ANTLR v3+ 语法。全部删除:

  • antlr-2.7.7.jar
  • stringtemplate-3.2.1.jar
  • antlr.jar
  • antlr-runtime-3.0.1.jar

从你的项目/类路径,只坚持 this ANTLR v3 JAR在其中(其中包含您需要的一切:运行时、字符串模板、工程!)。

祝你好运!


编辑

就个人而言,我使用 Ant 构建脚本进行 IDE 集成。我像这样生成词法分析器和解析器:

<target name="generate.parser" depends="init" description="Generates the lexer, parser and tree-walker from the grammar files.">
    <echo>Generating the lexer and parser...</echo>
    <java classname="org.antlr.Tool" fork="true" failonerror="true">
        <arg value="-fo" />
        <arg value="${main.src.dir}/${parser.package}" />
        <arg value="${parser.grammar.file}" />
        <classpath refid="classpath" />
    </java>
    <!-- snip -->
</target>

classpath refid 看起来像:

<path id="classpath">
    <!-- snip -->
    <fileset dir="lib">
        <include name="*.jar" />
    </fileset>
</path>

并且 lib/ 目录包含 ANTLR v3 JAR(没有其他 ANTLR JAR!(抱歉敲打那个 :)))

关于java - 为什么我的 Java ANTLR 语法文件没有编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5236448/

相关文章:

Java——私有(private)构造函数 vs final 等等

java - Android:Eclipse jar 图标为白色且无法访问类

jar - 重新分发 ANTLR 的运行时类

c# - ANTLR:如何避免在用户修改文本时重新解析整个文件

java:将数据保存到数组中

java - 从 Java 程序调用时 Perl 脚本未完全执行

java - 调用 pack() JPOS 时获取 NullPointerException

java - 如何连续循环菜单直到选择退出选项,以及如果选择无效操作则重复菜单

java - TableView 单元格自动换行

antlr - 是否有任何资源为 excel 函数提供 ANTLR 语法?