如果命令具有声明为规则的相同单词,则无法使用 ANTLR3 语法解析命令
Failed to parse command using ANTLR3 grammar, if command has same word which is declared as rule
我在使用我使用 ANLTR3 实现的解析器解析某些命令时遇到问题。解析器无法解析那些包含在语法中声明为词法分析器规则的 'any-word' 的命令。
例如,看看下面的语法:
show :
SHOW TABLES '[' projectName? tableName']' -> ^(SHOW TABLES_ ^(PROJECT_NAME projectName)? ^(DATASET_TABLE tableName));
SHOW : S H O W;
如果我尝试解析命令 'SHOW TABLES [sample-project:SHOW]' 则解析失败 command.But 如果我更改 SHOW 字然后它工作。
显示表 [sample-project:SHOW] - 这有效。
我不想获取用引号 (") 括起来的字符串形式的名称。
谁能建议解决方案?我正在使用 ANTLR3.
提前致谢。
这是使用保留字作为标识符的典型效果。在 ANTLR 中,当您定义像 SHOW
规则这样的保留字时,它将隐式地从您可能在该关键字规则之后定义的标识符规则中排除。
在像您的 tablName
这样的规则中允许此类关键字也作为标识符的解决方案是让该规则接受某些(或所有)可以在那个地方接受的关键字(然后不会充当关键字).示例:
tableName:
IDENTIFIER
| SHOW
| <others go here>
;
我在使用我使用 ANLTR3 实现的解析器解析某些命令时遇到问题。解析器无法解析那些包含在语法中声明为词法分析器规则的 'any-word' 的命令。 例如,看看下面的语法:
show :
SHOW TABLES '[' projectName? tableName']' -> ^(SHOW TABLES_ ^(PROJECT_NAME projectName)? ^(DATASET_TABLE tableName));
SHOW : S H O W;
如果我尝试解析命令 'SHOW TABLES [sample-project:SHOW]' 则解析失败 command.But 如果我更改 SHOW 字然后它工作。 显示表 [sample-project:SHOW] - 这有效。
我不想获取用引号 (") 括起来的字符串形式的名称。 谁能建议解决方案?我正在使用 ANTLR3.
提前致谢。
这是使用保留字作为标识符的典型效果。在 ANTLR 中,当您定义像 SHOW
规则这样的保留字时,它将隐式地从您可能在该关键字规则之后定义的标识符规则中排除。
在像您的 tablName
这样的规则中允许此类关键字也作为标识符的解决方案是让该规则接受某些(或所有)可以在那个地方接受的关键字(然后不会充当关键字).示例:
tableName:
IDENTIFIER
| SHOW
| <others go here>
;