如何使用antlr解析动态分隔符?

如何使用antlr解析动态分隔符?,antlr,antlr4,Antlr,Antlr4,我正在尝试从Cisco IOS配置解析以下命令: banner exec 其中,是用户选择的定界字符,例如磅符号(#)。不能在其中使用定界字符 似乎我需要为它使用语义谓词。但我想不出一个办法 杨只要你事先知道分隔符,你就可以使用这样的东西。您可以修改isDelimiter以支持任何单字符分隔符 @lexer::members { private boolean isDelimiter(int c) { return c == '#'; } } Message : Delimiter N

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

banner exec

其中,
是用户选择的定界字符,例如磅符号(#)。
不能在其中使用定界字符

似乎我需要为它使用语义谓词。但我想不出一个办法


只要你事先知道分隔符,你就可以使用这样的东西。您可以修改
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))}? . ;

只要您事先知道分隔符,就可以使用类似这样的内容。您可以修改
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))}? . ;

这是棘手的部分。分隔符在时间之前是未知的。只有在实际文件中才知道。在此方面的任何帮助都非常感谢。我认为这是一个具有挑战性的问题,很多人都可以从这个问题的答案中获益。分隔符在时间之前是未知的。只有在实际文件中才知道。在此方面的任何帮助都非常感谢。我认为这是一个具有挑战性的问题,许多人可以从中受益。在这里找到了一个类似的帖子: