2011-11-26 58 views
3

我正在擴展一個現有的開源項目,該項目在ANTLR中已經有一個非常先進的Lexer/Parser/TreeParser。我想堅持當前的目錄結構,所以我創建了我自己的目錄,我想將我的新(已寫入)語法文件。他們正在導入這三個原始語法文件並編譯代碼,我可以使用java org.antlr.Tool,我可以在其中指定一個目錄以使用-lib選項參數搜索導入的語法。ANTLR - 指定多個目錄搜索包含的語法

我的問題是,這三個原始導入的語法文件有一些導入本身,並再次在不同的目錄。爲了說明(繼承/導入最高層):

Abstract syntax directory: lexer   parser   tree parser 
Original syntax directory: lexer   parser   tree parser 
My new syntax directory: lexer   parser   tree parser 

這是層次結構。我遇到的麻煩是如何在ANTLR工具的命令行上使用-lib選項同時指定「抽象語法目錄」和「原始語法目錄」(或任何其他允許我編譯我的語法導入的解決方案具有給定目錄結構的原始文件)。

我試過-lib directory1 directory2,它似乎忽略了directory2(然後試圖編譯它,它不能,因爲它是一個目錄,而不是ANTLR語法)。我試過指定「-lib directory1 -lib directory2」,然後「-lib directory2」剛剛覆蓋「-lib directory1」。

這是我相信一個相當基本的需要指定多個目錄搜索,在任何更復雜的語法系統,因此我相信我錯過了什麼。我只是不能谷歌任何有用的東西。

如果您需要更多的細節,我很樂意爲您提供,這是我的碩士論文擴展了一個開源項目,所以我不需要保守任何祕密。 :)如果不可能,我可以沒有它,但真的想保持原始項目的一致性。

回答

1

看着the source of the org.antlr.Tool class

else if (args[i].equals("-lib")) { 
    if (i + 1 >= args.length) { 
    System.err.println("missing library directory with -lib option; ignoring"); 
    } 
    else { 
    i++; 
    libDirectory = args[i]; 
    if (libDirectory.endsWith("/") || libDirectory.endsWith("\\")) { 
     libDirectory = libDirectory.substring(0,libDirectory.length()-1); 
    } 
    File outDir = new File(libDirectory); 
    if (!outDir.exists()) { 
     ErrorManager.error(ErrorManager.MSG_DIR_NOT_FOUND,libDirectory); 
     libDirectory = "."; 
    } 
    } 
} 

似乎正在讀取只是一個-lib目錄。

我假設你的(隱含的)問題在此得到解答(不可能指向超過1 -lib目錄)。

+0

謝謝巴特。我對此非常不滿,似乎對於更復雜的語法來說非常基本,但我可以應付。無論如何,這個問題肯定得到了回答(除非有另一種方式去做--lib參數)。 –

相關問題