从权威ANTLR4参考文献中,我遍历了第一个示例,它生成了JAVA目标。在目录C:\ JavaLib中,当我尝试使用它编译时,具有antlr-4.5-complete.jar。
javac -classpath C:\JavaLib *.java
Run Code Online (Sandbox Code Playgroud)
它创建以下错误消息;
helloBaseListener.java:13: error: class HelloBaseListener is public, should be declared in a file named HelloBaseListener.java
public class HelloBaseListener implements HelloListener {
^
helloListener.java:9: error: class HelloListener is public, should be declared in a file named HelloListener.java
public interface HelloListener extends ParseTreeListener {
^
helloParser.java:12: error: class HelloParser is public, should be declared in a file named HelloParser.java
public class HelloParser extends Parser {
^
helloBaseListener.java:3: error: package org.antlr.v4.runtime does not exist
import org.antlr.v4.runtime.ParserRuleContext;
^
helloBaseListener.java:4: error: package org.antlr.v4.runtime.misc does not exist
import org.antlr.v4.runtime.misc.NotNull;
^
helloBaseListener.java:5: error: package org.antlr.v4.runtime.tree does not exist
import org.antlr.v4.runtime.tree.ErrorNode;
....
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
有两个问题。一种是文件必须命名为“ Hello.g4”,而不是“ hello.g4”,因为语法指定为Hello。第二个是类路径,它需要jar文件的路径和名称,以及当前目录。以下命令有效;
javac -classpath .;C:\JavaLib\antlr-4.5-complete.jar *.java
Run Code Online (Sandbox Code Playgroud)
小智 5
对于上面关于冒号分隔符的查询,答案是肯定的。我通过 debian 软件包安装并使用命令,然后再研究如何设置 CLASSPATH
javac -classpath /usr/share/java/antlr4-runtime.jar Expr*.java
Run Code Online (Sandbox Code Playgroud)
在此之前我遇到了很多编译错误。另外,在 debian 上似乎值得注意的是,目前我的 .bash_profile 从未加载,因此我需要将其放入 .bashrc 中