2011-04-03 9 views
-1

我在我的應用程序中使用Javacc解析器生成器,並想對我的語法做一些單元測試。Javacc的單元測試

我想知道是否有任何單元測試框架的javacc,就像gUnit是ANTLR。如果不是,那麼測試這個語法的最好方法是什麼?

+0

這個問題看起來可能是一個更適合的http:// softwarerecs。 stackexchange.com/ – Kevin 2014-11-18 22:09:39

回答

12

這裏沒有框架,但在my book's example code中有一些JavaCC和JJTree語法的測試例子。


湯姆科普蘭是經典Generating Parsers with JavaCC的作者。所提到的example code是免費提供的。

下面是一個簡單的機器人語法進行了抽樣檢測情況:

public class RobotTest { 

    @Test 
    public void tokenizeMoveCommand() { 
     String cmd = "STEP 10"; 
     SimpleCharStream cs = new SimpleCharStream(new StringReader(cmd)); 
     RobotTokenManager ltm = new RobotTokenManager(cs); 
     Token t = ltm.getNextToken(); 
     assertEquals(RobotConstants.STEP, t.kind); 
     t = ltm.getNextToken(); 
     assertEquals(RobotConstants.NUM, t.kind); 
    } 

    @Test(expected = TokenMgrError.class) 
    public void tokenizeFailure() { 
     String cmd = "STOP 10"; 
     SimpleCharStream cs = new SimpleCharStream(new StringReader(cmd)); 
     RobotTokenManager ltm = new RobotTokenManager(cs); 
     ltm.getNextToken(); 
    } 
} 

語法本身:

options { 
    BUILD_PARSER=false; 
    STATIC=false; 
} 
PARSER_BEGIN(Robot) 

public class Robot {} 
PARSER_END(Robot) 
TOKEN_MGR_DECLS: { 
    public static void main(String[] args) throws Exception { 
    java.io.Reader r = new java.io.FileReader(args[0]); 
    SimpleCharStream scs = new SimpleCharStream(r); 
    RobotTokenManager mgr = new RobotTokenManager(scs); 
    for (Token t = mgr.getNextToken(); t.kind != EOF; 
     t = mgr.getNextToken()) { 
     System.out.println("Found a " + RobotConstants.tokenImage[t.kind] + ": " + t.image); 
    } 
    } 
}  
SKIP : 
{ 
    " " 
| "\n" 
| "\r" 
| "\r\n" 
} 
TOKEN : 
{ 
    <STEP : "STEP"> 
| <RIGHT : "RIGHT"> 
| <LEFT : "LEFT"> 
| <NUM : (["1"-"9"])+ (["0"-"9"])*> 
} 
+3

根據[常見問題](http://stackoverflow.com/faq#promotion)''小心,因爲社區不喜歡公開的自我推銷,並傾向於投票並將其標記爲垃圾郵件。好的,相關的答案,如果它們恰好是關於你的產品或網站的,那就這樣吧。但是,你必須披露你的答案中的你的聯繫。此外,如果你的帖子中有很大一部分包含提及你的產品或網站的信息,那麼你可能出於錯誤的原因。「」雖然你的自我推銷是主題,「如果你購買我的書,你會發現答案「並不完全有幫助 – Will 2011-04-04 14:38:27

+2

是的,但示例代碼可以在該鏈接免費獲得...不需要購買書...他們只需下載示例並查看」測試「中的示例,章節目錄 – tomcopeland 2011-04-04 19:28:03

+3

但是,要注意的是,你抓到了一些垃圾郵件標誌;得到五個,這被刪除,你失去了100個代表 – Will 2011-04-04 19:43:45