2016-02-10 97 views
0

在字符串中我有一個ANTLR4語法特定JSON格式 (我知道,我應該使用JSON模式,但讓我們忽略現在)詞法模式Antlr4

由於我的JSON對象的一部分,我想匹配這樣的字符串:

"order" : "somefield ASC, someotherfield DESC" 

下面是相關的語法部分

分析器:

orderObject  : ORDER; 

詞法:

COLON: ':'; 
QUOT: '"'; 
FIELDNAME : ALPHA (ALPHA | DIGIT | UNDER)*; 
fragment DIGIT : [0-9]; 
fragment UNDER : '_'; 
fragment ALPHA : [a-zA-Z]; 
ORDER : '"order"' -> pushMode(ORDERMODE); 
WS : [ \r\n\t]+ -> skip; 


mode ORDERMODE; 
WS2 : [ \r\n\t]+ -> skip; 
PREFIX   : COLON QUOT -> skip; 
ORDERCLAUSE  : (ORDERITEM (COMMA ORDERITEM)*)+; 
CLOSE   : '"' -> popMode; 
ORDERITEM  : FIELDNAME ORDERDIRECTION?; 
ORDERDIRECTION : 'ASC' | 'DESC'; 

我得到的輸出是

line 1:8 token recognition error at: ': ' 

我在做什麼錯?

回答

1

您可能還沒有在ORDERMODE模式中定義COLON -ish令牌(與QUOT相同) - 每種模式都是完全獨立的規則集。

您可以通過使用片段規則來最大限度地減少此限制 - 它們在所有模式下均可見。

... 
COLON : Colon ; 
QUOT : Quot ; 


mode ORDERMODE; 
PREFIX : COLON1 QUOT1 -> skip; 
... 
COLON1 : Colon ; 
QUOT1 : Quot ; 

... 
fragment Colon : ':' ; 
fragment Quot : '"' ;