compiler-construction - 如何在 antlr4 lexer g4 文件中为 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]*;
推荐阅读
- node.js - 如何使用node js(服务器端)在移动应用中实现支付机制?
- google-bigquery - BigQuery 集群每小时
- angular - 如何在循环中执行 ngModel?
- typescript - 对于已发布的包,@types 应该是什么依赖类型?
- javascript - OpenRouteService Directions api使用
- r - 将自定义函数应用于多个 data.table 列
- android - 显示消息回调未调用 - Firebase 应用内消息
- excel - 基于一个条件转置行和列的 VBA 宏
- tfs - 如何使用 TFS 在子文件夹上选择相同的扩展文件?
- reactjs - 如何从 Next Js URL 中删除子文件夹名称?