2014-01-20 25 views
0

如何在{}內對(事物)(無序)集合建模。
每件事情可能只發生一次,或根本不發生。該集合中的發生順序是隨機的。例如set { a, b, c }set { c, b }。如何在antlr4的詞法分析器中對此進行建模?建模ANTLR4詞法分析器中的無序集合

回答

0

我完全不會使用詞法分析器。要在解析器驗證這一點,我會用一個規則如下所示:

set 
    : 'set' '{' 
    (a 
    | b 
    | c 
    )* 
    '}' 
    ; 

我會再創建解析樹聽衆或訪客驗證[0-1]約束。該方法的參數是SetContext ctx

if (ctx.a().size() > 1) 
    myReportErrorMethod("set can only contain one 'a' item"); 
if (ctx.b().size() > 1) 
    myReportErrorMethod("set can only contain one 'b' item"); 
if (ctx.c().size() > 1) 
    myReportErrorMethod("set can only contain one 'c' item"); 
+0

優秀。我一直在努力研究如何限制語法中的出現次數 - 詞法分析器或解析器。但是上面的監聽器中的代碼很有意義!謝謝。這回答了我的問題。 – user3213604