2013-05-06 60 views
1

我試圖從的Cisco IOS配置解析以下命令:如何使用antlr解析動態分隔符?

banner exec <d> <message> <d>

其中<d>是用戶的選擇,英鎊符號(#)的分隔字符,例如。 <message>不能在其中使用分隔符。

看來我需要爲它使用語義謂詞。但無法想出辦法。

回答

1

只要你提前知道的分隔符,你可以使用這樣的事情。您可以修改isDelimiter以支持任何單字符分隔符。

@lexer::members { 
    private boolean isDelimiter(int c) { return c == '#'; } 
} 

Message : Delimiter NotDelimiter* Delimiter; 
fragment Delimiter : {isDelimiter(_input.LA(1))}? . ; 
fragment NotDelimiter : {!isDelimiter(_input.LA(1))}? . ; 
+0

這是棘手的部分。分隔符未提前知道。它只在實際的文件中已知。 – 2013-05-07 05:02:30

+0

真的很感激這個人的任何幫助。我認爲這是一個具有挑戰性的問題,許多人可以從中得到答案。 – 2013-05-09 09:14:10

+0

在這裏找到一個類似的帖子:http://stackoverflow.com/questions/14286870/antlr3-dynamic-quotes-in-lexer – 2013-05-14 23:42:44