0
我写了一个编译器程序,现在我试图从终端运行它。我在我的程序中使用antlr库。这个代码在使用eclipse编译时工作得很好。编译并运行在mac终端上的java程序
我在终端使用下面的命令
javac -classpath antlr-runtime-3.2.jar Main.java
文件ANTLR运行时-3.2.jar存在,但仍然我收到以下错误
- Main.java:34:错误:无法找到符号MiniJavaLexer词法分析器=新MiniJavaLexer(charStream)
- Main.java:42:错误:无法找到符号PrintVisitor dfsPrint =新PrintVisitor()
- Main.java:46:错误:无法找到符号SymbolTableVisitor stVisitor =新SymbolTableVisitor()
此错误是来找我利用一切类。
我想要编译,然后使用终端运行程序
的main.java文件包含
package mini.java.compiler;
import java.io.IOException;
import org.antlr.runtime.ANTLRFileStream;
import org.antlr.runtime.CharStream;
import org.antlr.runtime.CommonTokenStream;
import org.antlr.runtime.RecognitionException;
import org.antlr.runtime.tree.Tree;
public class Main {
public static void main(String[] args) throws RecognitionException,
IOException {
// TODO Auto-generated method stub
String file = "samples/factorial.java";
CharStream charStream = new ANTLRFileStream(file);
MiniJavaLexer lexer = new MiniJavaLexer(charStream);
CommonTokenStream tokens = new CommonTokenStream(lexer);
MiniJavaParser parser = new MiniJavaParser(tokens);
MiniJavaParser.goal_return res = parser.goal();
Tree tree = (Tree) res.getTree(); // The root node.
/* Print tree */
PrintVisitor dfsPrint = new PrintVisitor();
dfsPrint.visit(tree);
/* Symbol table construction */
SymbolTableVisitor stVisitor = new SymbolTableVisitor();
SymbolTable symTab = (SymbolTable) stVisitor.visit(tree);
System.out.println("-------------------");
System.out.println("Symbol Table");
System.out.println("-------------------");
symTab.printTable();
symTab.resetTable();
/* Type checking */
TypeCheckingVisitor tcVisitor = new TypeCheckingVisitor(symTab);
tcVisitor.visit(tree);
symTab.resetTable();
/* Byte Code Generation */
CodeGenerationVisitor cgVisitor = new CodeGenerationVisitor(symTab);
ClassFile cf = (ClassFile) cgVisitor.visit(tree);
System.out.println("-------------------");
System.out.println("Stack Machine Code");
System.out.println("-------------------");
cf.print();
cf.writeToFile();
}
}
你不会导入它们...... –
@DaveNewton我没有导入它们,因为它们在同一个包中。 –
然后你的编译类路径不正确。 –