Я работаю над парсером Regx для RegEx внутри XSD. Моя предыдущая проблема была описана здесь: ANTLR4 parsing RegExANTLR4 Режимы lexer RegEx
С тех пор я расколол Lexer и Parser. Теперь у меня проблема с анализом скобок внутри скобок. Их следует рассматривать как символы внутри скобок и как группировать токены снаружи. Это моя лексер грамматика:
lexer grammar RegExLexer;
Char : ALPHA ;
Int : DIGIT ;
LBrack : '[' ;//-> pushMode(modeRange) ;
RBrack : ']' ;//-> popMode ;
LBrace : '(' ;
RBrace : ')' ;
Semi : ';' ;
Comma : ',' ;
Asterisk: '*' ;
Plus : '+' ;
Dot : '.' ;
Dash : '-' ;
Question: '?' ;
LCBrace : '{' ;
RCBrace : '}' ;
Pipe : '|' ;
Esc : '\\' ;
WS : [ \t\r\n]+ -> skip ;
fragment DIGIT : [0-9] ;
fragment ALPHA : [a-zA-Z] ;
И вот пример:
[0-9a-z()]+
Я чувствую, что я должен использовать режимы на скобки, чтобы изменить поведение ALPHA фрагмента. Если я скопирую фрагмент, я получаю сообщение о том, что не могу иметь объявление дважды. Я прочитал ссылку об этом, и я до сих пор не понимаю, что я должен делать.
Как реализовать режимы?
Как насчет 'CharSet: '[' '^'? ']'? '-'? ([^] \\ -] '-' [^] \\ -] | [^] \\ -] | ESCAPE_SEQUENCE) * '-'? ']' ' – programmerjake
Я просто не знаю, что вы имели в виду, и позвольте использовать это. – user1941235
это токен для antlr, который является классом символов. – programmerjake