我正在尝试从 Cisco IOS 配置解析以下命令:
banner exec <d> <message> <d>
where<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))}? . ;