解析包含点 (.) 的输入字符串未在 ANTLR 中得到验证
Parsing an input string containing a dot(.) is not getting validated in ANTLR
我有一个应用程序 "abc",我正在尝试解析一个作业(输入字符串)。
如果作业名称包含点 (.),abc 将抛出错误以显示作业状态
»abc status -jn UpgradeJob_435_1.61.4_xyz_1000_KPI_Upgrade_confirm
Error 2001 : Command Syntax error. extraneous input
'.61.4_xyz_1000_KPI_Upgrade_confirm' expecting
{<EOF>, JOB, JOB_OWNER, JOB_TYPE, JOB_STATUS}
Suggested Solution : Please check online help for correct syntax
如果我们在双引号中给出工作名称,它就可以正常工作。
为了修复同样的问题,我在命令解析器中添加了 DOT 规则。以下是所做更改的片段。
解析器片段:
jobNameQuery :
JOB (id | DOT | stringWithQuotes)
;
jobOwnerQuery:
JOB_OWNER (id | DOT | stringWithQuotes)
;
雷克沙片段:
DOT : '.' ;
ID: [a-zA-Z0-9_]([a-zA-Z0-9_@{}()#$%^~!`'-] | '[' | ']' )*;
错误信息:
命令语法错误。外部输入 '.1' 期望 {, JOB, JOB_OWNER, JOB_TYPE, JOB_STATUS}
有人可以建议我需要进行哪些更改吗?
根据您的具体要求,将 .
设为 ID
中允许的字符之一,或者更改
(id | DOT | stringWithQuotes)
到
(
id (DOT id)*
| stringWithQuotes
)
就像现在一样,您允许使用带引号的字符串、标识符或单个点 - 而不是标识符与点的混合。
我有一个应用程序 "abc",我正在尝试解析一个作业(输入字符串)。
如果作业名称包含点 (.),abc 将抛出错误以显示作业状态
»abc status -jn UpgradeJob_435_1.61.4_xyz_1000_KPI_Upgrade_confirm
Error 2001 : Command Syntax error. extraneous input
'.61.4_xyz_1000_KPI_Upgrade_confirm' expecting
{<EOF>, JOB, JOB_OWNER, JOB_TYPE, JOB_STATUS}
Suggested Solution : Please check online help for correct syntax
如果我们在双引号中给出工作名称,它就可以正常工作。
为了修复同样的问题,我在命令解析器中添加了 DOT 规则。以下是所做更改的片段。
解析器片段:
jobNameQuery :
JOB (id | DOT | stringWithQuotes)
;
jobOwnerQuery:
JOB_OWNER (id | DOT | stringWithQuotes)
;
雷克沙片段:
DOT : '.' ;
ID: [a-zA-Z0-9_]([a-zA-Z0-9_@{}()#$%^~!`'-] | '[' | ']' )*;
错误信息:
命令语法错误。外部输入 '.1' 期望 {, JOB, JOB_OWNER, JOB_TYPE, JOB_STATUS}
有人可以建议我需要进行哪些更改吗?
根据您的具体要求,将 .
设为 ID
中允许的字符之一,或者更改
(id | DOT | stringWithQuotes)
到
(
id (DOT id)*
| stringWithQuotes
)
就像现在一样,您允许使用带引号的字符串、标识符或单个点 - 而不是标识符与点的混合。