parsing - ANTLR4 解析包含关键字的变量名
问题描述
我正在尝试解析 antlr4 中的简单整数声明。
我现在正在做的语法是:
main : 'int' var '=' NUMBER+ ;
var : LETTER (LETTER | NUMBER)* ;
LETTER: [a-zA-Z_] ;
NUMBER: [0-9] ;
WS : [ \t\r\n]+ -> skip ;
当我尝试使用 测试主要规则时int int_A = 0
,出现错误:
期待 LETTER 的无关输入“int”。
我知道这是因为变量名“int_A”包含关键字“int”,但是如何修改我的语法?谢谢。
解决方案
词法分析器创建具有尽可能多字符的标记。因此int_A
被标记为以下 3 个标记:
'int'
(解析器中定义的 int 关键字)LETTER
(_
)LETTER
(A
)
所以解析器不能var
用这些标记创建一个。
代替解析器规则var
,使其成为词法分析器规则:
main : 'int' VAR '=' NUMBER+ ;
VAR : [a-zA-Z_] ([a-zA-Z_] | [0-9])* ;
NUMBER : [0-9]+ ;
WS : [ \t\r\n]+ -> skip ;
推荐阅读
- php - 如何通过 endback 获取 ng2-file-upload 的参数?
- python-3.x - 如何使用python从PDF文件中提取文本,我从来没有这样做过,也没有得到PDF文件的DOM
- python - 从列中识别无值
- nginx - nginx可以对websocket连接做透明压缩吗?
- persistent - 实现持久段树的问题
- .net - 使用全文或 mimeType 查询在 google drive v3 api 中搜索文件会给出“无效值”消息
- html - 如何将网格元素高度设置为其余空间
- python - 从特定列中删除异常值
- angular - 角度监听启用/禁用元素
- sql-server - 在混合模式下使用 PowerShell 脚本复制 SQL Server 数据库