基于变量选择lexer模式



My lexer(目标语言C++(包含一个解析字符串文字的简单规则:

STRING: '"' ~'"'+ '"';

但基于函数返回的值,我希望lexer返回一个STRING或IDENT。

我试过以下几种:

STRING_START:  '"'  -> mode(current_string_mode());

STRING_START:  '"'  -> mode(current_string_mode() == IDENT ? MODE_IDENT : MODE_STRING) ;

在任何一种情况下,我都会在尝试生成lexer时出错(错误消息显示:'"' came as a complete surprise(

唉,这是不可能的。

如果我看看ANTLR本身的语法,我会看到:

lexerCommands
: RARROW lexerCommand (COMMA lexerCommand)*
;
lexerCommand
: lexerCommandName LPAREN lexerCommandExpr RPAREN
| lexerCommandName
;
lexerCommandName
: identifier
| MODE
;
lexerCommandExpr
: identifier
| INT
;

简而言之:括号(mode(...)pushMode(...)(之间的部分必须是标识符或整数。它不能是一个表达式(你试图做的事情(。

相关内容

  • 没有找到相关文章

最新更新