1
我试图从的Cisco IOS配置解析以下命令:如何使用antlr解析动态分隔符?
banner exec <d> <message> <d>
其中<d>
是用户的选择,英镑符号(#)的分隔字符,例如。 <message>
不能在其中使用分隔符。
看来我需要为它使用语义谓词。但无法想出办法。
杨
我试图从的Cisco IOS配置解析以下命令:如何使用antlr解析动态分隔符?
banner exec <d> <message> <d>
其中<d>
是用户的选择,英镑符号(#)的分隔字符,例如。 <message>
不能在其中使用分隔符。
看来我需要为它使用语义谓词。但无法想出办法。
杨
只要你提前知道的分隔符,你可以使用这样的事情。您可以修改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))}? . ;
这是棘手的部分。分隔符未提前知道。它只在实际的文件中已知。 – 2013-05-07 05:02:30
真的很感激这个人的任何帮助。我认为这是一个具有挑战性的问题,许多人可以从中得到答案。 – 2013-05-09 09:14:10
在这里找到一个类似的帖子:http://stackoverflow.com/questions/14286870/antlr3-dynamic-quotes-in-lexer – 2013-05-14 23:42:44