Antlr4 grun工具使用问题:tokens命令输出为空、别名存储位置查询
问题解答
一、grun执行无输出的错误原因
你操作中的错误主要有三点:
- 输入文件类型错误
grun需要接收的是待解析的自定义测试文本文件,你输入的是ANTLR编译语法时自动生成的.tokens词法符号定义文件,该文件不是测试输入用的,自然不会有有效输出。你需要自行新建测试文本,比如写入name = abc这类符合你语法规则的内容,再作为输入传入grun。 - 未提前编译语法文件
运行grun前必须先完成语法编译步骤:- 执行
antlr4 qwe.g4编译你的语法文件,生成对应的Java类文件 - 执行
javac qwe*.java编译生成的Java类
只有当前目录存在编译好的.class文件时,grun才能正常识别你的语法。
- 执行
- 命令参数使用错误
grun的标准命令格式为grun 语法名 起始规则名 [选项] [输入文件],你将第二个起始规则参数写为了tokens,而你语法的起始规则是query,参数匹配错误也会导致执行异常。正确的测试命令示例为:grun qwe query -tokens < 你的测试文本路径
另外你的语法本身存在潜在问题:ANTLR的词法规则按定义顺序优先匹配,你定义的COLUMN和SCALAR匹配规则完全一致,所有符合规则的字符串都会被优先识别为COLUMN,永远不会匹配到SCALAR,会导致后续语法解析失败,建议你调整词法规则,或者合并为同一规则后在语法层做判断。
二、grun别名的存储位置
Ubuntu下自定义别名通常存储在当前用户的Shell配置文件中,根据你使用的Shell类型不同,常见位置如下:
- 使用Bash的用户:别名一般定义在
~/.bashrc、~/.bash_profile或~/.profile文件中 - 使用Zsh的用户:别名一般定义在
~/.zshrc文件中
你可以执行grep -r "alias grun" ~/命令快速搜索别名的定义位置。如果执行alias | grep grun无输出,说明你并未成功配置grun别名,需要重新配置后执行source 对应配置文件使别名生效。
内容的提问来源于stack exchange,提问作者Альберт Александров
相关产品推荐
相关产品推荐

