【问题标题】:Why is my ANTLR grammar file for Java not compiling?为什么我的 Java ANTLR 语法文件无法编译?
【发布时间】:2011-03-08 18:06:07
【问题描述】:

我得到了一个用于 Java 编译器子集的 ANTLR 语法,称为静态 Java 编译器。我正在尝试扩展语法以包含更多 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 包含在 Libraries 下:

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

有什么想法或建议吗?

【问题讨论】:

    标签: java eclipse antlr antlrworks


    【解决方案1】:

    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!(对不起,:)))

    【讨论】:

    • 它似乎不起作用。在 Eclipse 中,我右键单击项目,选择属性,然后选择 Java Build Path -> Libraries。从这里我删除了您上面列出的所有 jar,并添加了来自您提供的链接的 antlr-3.2.jar。它给了我和以前一样的错误。
    • @Treebranch,我能给出的唯一建议是,如果您不能 100% 确定工具如何相互协作,请不要使用这些工具。在您的情况下,您不能 100% 确定 Eclipse 和 ANTLR 如何交互:不要一起使用它们,而是在命令行中使用 ANTLR。我可以告诉你一件事:我确定你的 2.7 JAR 与你发布的语法的 sn-p 错误,并且我链接的 JAR 不需要单独的运行时或字符串模板库。祝你好运!
    • @Treebranch,如果您发布您的语法,我可以向您展示如何在命令行中毫无问题地生成解析器和词法分析器!
    • 我很欣赏这个提议,但这并不是我无法生成解析器和词法分析器。实际上,我可以用 ANTLRWorks 做到这一点。问题是我想在 Eclipse 中使用它,以便我可以针对它运行我的 JUnit 测试。
    • @Treebranch,啊,我明白了。检查我的编辑,在这种情况下。祝你好运!
    【解决方案2】:

    您可能已经安装了AntlrEclipse plugin。这确实使用了 Antlr 2.7.something。然而,有一个可用的插件可与 v3 一起使用,Antlr IDE。这个插件有点高级,因为它允许您配置 Antlr 版本(3+),可以显示铁路视图并具有解释器。

    注意如果您使用的是 Eclipse Juno,则需要从 Indigo 存储库安装 DLTK,因为 4.0.0 是 antlr 插件的新版本

    【讨论】:

      【解决方案3】:

      我也有这个问题。

      在我尝试运行 antlr 的过程中,我曾将一些版本的 jar 文件添加到我的类路径 windows 环境变量中。我删除了此条目,它解决了我的问题。

      【讨论】:

        猜你喜欢
        • 2012-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-20
        • 2014-07-30
        相关资源
        最近更新 更多