ANTLR4 lexer是否可以消耗更多令牌并停止在现有规则上?期望在一个token中消耗更多的字符。
小规则
lexer grammar PhpLexer;
options {
superClass = PhpLexerBase;
caseInsensitive = true;
}
T_OPEN_TAG_WITH_ECHO: '<?=' -> pushMode(PHP);
T_OPEN_TAG: PhpOpenTag -> pushMode(PHP);
T_INLINE_HTML: .+?; // Problem Point
mode PHP;
T_CLOSE_TAG: '?>';
T_BAD_CHARACTER: .;
fragment NEWLINE: '\r'? '\n' | '\r';
fragment PhpOpenTag
: '<?php' ([ \t] | NEWLINE)
| '<?php' EOF
;
输入:
<html><?php echo "Hello, world!"; ?></html>
得到:
T_INLINE_HTML -> "<"
T_INLINE_HTML -> "h"
T_INLINE_HTML -> "t"
T_INLINE_HTML -> "m"
T_INLINE_HTML -> "l"
T_INLINE_HTML -> ">"
T_OPEN_TAG -> "<?php "
……
预期:
T_INLINE_HTML -> "<html>"
T_OPEN_TAG -> "<?php "
……
1条答案
按热度按时间gtlvzcf81#
注意,
T_INLINE_HTML: .+?;
的结果与写入T_INLINE_HTML: .;
的结果相同:两者将始终匹配单个字符。试试这样的方法: