1

我正在尝试从 Cisco IOS 配置解析以下命令:

banner exec <d> <message> <d>

where<d>是用户选择的分隔字符,例如井号 (#)。<message>不能在其中使用分隔符。

看来我需要为此使用语义谓词。但是想不出办法。

4

1 回答 1

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))}? . ;
于 2013-05-07T03:26:40.537 回答