我已经获得了一个称为静态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行:'意外令牌:语法' 第二个错误在第5行:'意外的字符:@'
为什么它不能识别这种基本的ANTLR语法?我的第一个想法是我在类路径中遗漏了一些东西,但我去了项目的属性,并确保以下JAR包含在 Libraries 中:
有任何想法或建议吗?
答案 0 :(得分:5)
antlr-2.7.7.jar
错误:你的语法是ANTLR v3 +语法。全部删除:
来自你的项目/类路径,并且只包含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!(对不起锤击:)
))
答案 1 :(得分:2)
您可能已经安装了AntlrEclipse plugin。这确实使用了Antlr 2.7.something。但是有一个插件可用于v3,Antlr IDE。这个插件稍微高一点,因为它允许你配置Antlr版本(3+)并且可以显示铁路视图并且有一个解释器。
注意如果您使用的是Eclipse Juno,则需要从Indigo repositorties安装DLTK,因为对于antlr插件,4.0.0是新的
答案 2 :(得分:1)
我也有这个问题。
在我尝试运行antlr的某个时刻,我已经将一些版本的jar文件添加到了我的classpath windows环境变量中。我删除了这个条目,它解决了我的问题。