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我沒有導入它們,因爲它們在同一個包中。 –
然後你的編譯類路徑不正確。 –