java - ANTLR Ubuntu Java Makefile

标签 java ubuntu makefile antlr antlr4

我一直在尝试测试一些学生编写的一个简单项目。我在 Ubuntu 上测试它,该项目要求我使用 ANTLR 和 Makefile。 找到能够成功编译和执行的 makefile、文件和文件夹的配置是一场噩梦。

基本上这是文件夹/文件设置:

Makefile
test.txt
laboratorio/
  lab02/
    Main.java
    Lab02.g

Main.java 的内容相当简单。他们只是逐个读取语法标记:

package laboratorios.lab02;
import org.antlr.v4.runtime.*;

public class Main{
    public static void main(String[] args) throws Exception{
        try{
            Lab02 lexer = new Lab02(new ANTLRFileStream(args[0]));
            while (lexer.nextToken().getType() != Token.EOF);
        }catch(ArrayIndexOutOfBoundsException aiobe){
            System.err.println("Must provide a valid path to the filename with the tokens");
            System.exit(1);
        }catch(Exception e){
            System.err.println("Must provide a valid path to the filename with the tokens");
            System.exit(1);
        }
    }
}

Lab02.g 的内容(语法)与问题无关,但它生成一个 Lab02.java 文件(带有包 Laboratorios.lab02),该文件必须由 Main.java 文件编译和引用。

尝试在 Ubuntu 上测试 makefile 时出现问题。对于我尝试的每个配置,我不断收到错误(在编译或运行主 java 文件时),例如:

  • java.lang.NoClassDefFoundError: org/antlr/v4/runtime/CharStream
  • 无法找到或加载主类org.antlr.v4.Tool
  • 错误:无法找到或加载主类

我已经按照本教程的具体步骤在我的电脑上设置了antlr:Getting Started with ANTLR v4

最佳答案

经过多次不成功的尝试,我得到了这个神奇的配置,它使整个项目运行良好。

生成文件:

make:  gramatica main

gramatica: laboratorios/lab02/Lab02.g
    java org.antlr.v4.Tool laboratorios/lab02/Lab02.g

main: laboratorios/lab02/Lab02.java laboratorios/lab02/Main.java
    javac laboratorios/lab02/Lab02.java laboratorios/lab02/Main.java

run: laboratorios/lab02/Main.class
    java -cp ${CLASSPATH}:Lab02.class laboratorios/lab02/Main test.txt

clean:
    rm -rf laboratorios/lab02/*.tokens
    rm -rf laboratorios/lab02/*.class
    rm -rf laboratorios/lab02/Lab02.java
    rm -rf laboratorios/lab02/*~

我要求我在 bashrc 中设置 CLASSPATH,如下所示:

export CLASSPATH=.:~/your/path/to/antlr/antlr-4.2-complete.jar

正如您在我之前提到的教程 ( Getting Started with ANTLR v4 ) 中发现的那样,它表示您应该使用引号编写类路径。完全忽略这个建议!每当我使用引号时,主类都不会运行,因为 ANTLR 已“丢失”。此外,教程中的别名是完全可选的。

其他一些值得指出的事情是将 Makefile 放在 Laboratorio/lab02/文件夹中也没有帮助。将其移出并从外部引用 java 文件有很大帮助。字符“.:”帮助执行 Main 类,因为它会说找不到它。

关于java - ANTLR Ubuntu Java Makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25400930/

相关文章:

使用 TextMate 编译 C 代码

java - tomcat默认可以处理多少并发请求

java - 使用 SourceDataLine 时帧速率不稳定

带有 VSCode 和 Ubuntu 的 Git 配置问题

c - 想要使用 GSTREAMER 设置捕捉视频的时间

ubuntu - 如何修复错误 : implicit declaration of function ‘setup_timer’

在 Win8/Ubuntu 上编译 Makefile 行为不同?

java - 将形状旋转 90 度

java - 如何通过 API 在 Windchill 中的部件之间创建链接

linux - 无法从其他 shell 脚本运行 shell 脚本