繁体   English   中英

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

[英]Why is my ANTLR grammar file for Java not compiling?

我已经获得了一个称为静态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行:'意外的char:@'

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

  • ANTLR-2.7.7.jar
  • StringTemplate的 - 3.2.1.jar
  • antlr.jar
  • ANTLR运行时-3.0.1.jar

任何想法或建议?

antlr-2.7.7.jar是错的:你的语法是ANTLR v3 +语法。 移除所有:

  • ANTLR-2.7.7.jar
  • StringTemplate的 - 3.2.1.jar
  • antlr.jar
  • ANTLR运行时-3.0.1.jar

从你的项目/类路径中只有这个ANTLR v3 JAR (它包含你需要的一切:runtime,stringtemplate,works!)。

祝好运!


编辑

就个人而言,我使用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!(抱歉打击:)

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

注意如果您使用的是Eclipse Juno,则需要从Indigo repositorties安装DLTK,因为对于antlr插件,4.0.0是新的

我也有这个问题。

在我尝试运行antlr运行期间的某个时刻,我已经将一些版本的jar文件添加到了我的classpath windows环境变量中。 我删除了这个条目,它解决了我的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM