如何在 antlr4 lexer g4 文件中为 IF () THEN abc ELSEIF () THEN xyz ElSE yzx ENDIF 创建令牌
How to create token in antlr4 lexer g4 file for IF () THEN abc ELSEIF () THEN xyz ElSE yzx ENDIF
问题是我已经编写了词法分析器文件并创建了像
这样的令牌
IF_EXPR : 'IF';
ELSEIF_EXPR : 'ELSEIF';
THEN_EXPR : 'THEN';
ELSE_EXPR : 'ELSE'
但在某些情况下,我可以在条件块或 THEN 块中包含一些包含 'IF' 的字符串。并将字符串中的 'IF' 视为标记。
示例:
IF abc=1
THEN
xyzIF=3
ELSE
abc=2
ENDIF
在上面的示例中,我的词法分析器将 xyzIF 中的 'IF' 视为 IF_EXPR 标记,但它应该将 xyzIF 视为一个不同的标记。
您应该有一个 IDENTIFIER
规则定义来匹配 xyzIF
:
// Keywords first!
IF : 'IF';
// After keywords, define something that matches an identifier:
IDENTIFIER : [a-zA-Z_] [a-zA-Z_0-9]*;
问题是我已经编写了词法分析器文件并创建了像
这样的令牌IF_EXPR : 'IF';
ELSEIF_EXPR : 'ELSEIF';
THEN_EXPR : 'THEN';
ELSE_EXPR : 'ELSE'
但在某些情况下,我可以在条件块或 THEN 块中包含一些包含 'IF' 的字符串。并将字符串中的 'IF' 视为标记。
示例:
IF abc=1
THEN
xyzIF=3
ELSE
abc=2
ENDIF
在上面的示例中,我的词法分析器将 xyzIF 中的 'IF' 视为 IF_EXPR 标记,但它应该将 xyzIF 视为一个不同的标记。
您应该有一个 IDENTIFIER
规则定义来匹配 xyzIF
:
// Keywords first!
IF : 'IF';
// After keywords, define something that matches an identifier:
IDENTIFIER : [a-zA-Z_] [a-zA-Z_0-9]*;