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

为什么我的ANTLR Java语法文件没有编译?,java,eclipse,antlr,antlrworks,Java,Eclipse,Antlr,Antlrworks,我得到了一个用于Java编译器子集的ANTLR语法,称为静态Java编译器。我试图扩展语法以包含更多Java特性,例如,我刚刚添加了for循环的语法 使用Eclipse和一个ANTLR插件,我然后“编译ANTLR语法”。它没有编译,而是在第一位代码上产生了两个错误: grammar ExtendedStaticJava; options { backtrack=true; memoize=true; } @header { package sjc.parser.extended; impor

我得到了一个用于Java编译器子集的ANTLR语法,称为静态Java编译器。我试图扩展语法以包含更多Java特性,例如,我刚刚添加了for循环的语法

使用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.
语法扩展静态java;
选项{backtrack=true;memoize=true;}
@标题
{
包sjc.parser.extended;
导入java.math.biginger;
/**
*扩展静态Java解析器。
*@作者
*/
}
//语法的其余部分已被排除在外。
第一个错误在第1行:“意外标记:语法” 第二个错误在第5行:“意外字符:@”

为什么它不能识别这个基本的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
从您的项目/类路径开始,只需插入它(它包含您需要的所有内容:运行时、stringtemplate、works!)

祝你好运


编辑 就个人而言,我使用Ant构建脚本进行IDE集成。我生成一个lexer和解析器,如下所示:

<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>

lib/
目录包含ANTLR v3 JAR(没有其他ANTLR JAR!(很抱歉在这个
:)

我也有这个问题


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

您可能已经安装了。这确实使用了ANTLR2.7.0。不过,有一个插件可用于v3。这个插件稍微高级一点,因为它允许您配置Antlr版本(3+),可以显示铁路视图,并且有一个解释器

注意:如果您使用的是EclipseJuno,则需要从Indigo Repositories安装DLTK,因为4.0.0是antlr插件的新版本


它似乎不起作用。在Eclipse中,我右键单击项目,选择属性,然后单击Java构建路径->库。从这里我删除了上面列出的所有jar,并添加了antlr-3.2.jar,它来自您提供的链接。它给了我和以前一样的错误。@Treebranch,我唯一能给你的建议是,如果你不能100%确定工具是如何相互作用的,不要使用这些工具。在您的例子中,您不能100%确定Eclipse和ANTLR是如何交互的:不要将它们一起使用,而是将ANTLR与命令行一起使用。我可以告诉你一件事:我确信你的2.7JAR与你发布的语法片段是错误的,我链接的JAR不需要单独的运行时或stringtemplate库。祝你好运@Treebranch,如果你发布你的语法,我可以告诉你如何在命令行中生成语法分析器和词法分析器而不会出现问题!我很感激这个提议,但这并不是说我不能生成解析器和词法分析器。事实上,我可以用ANTLRWorks来做。问题是我希望它出现在Eclipse中,这样我就可以对它运行JUnit测试了。@Treebranch,啊,我明白了。在这种情况下,请检查我的编辑。祝你好运!
<path id="classpath">
    <!-- snip -->
    <fileset dir="lib">
        <include name="*.jar" />
    </fileset>
</path>