我有一个应用程序“ 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)
;
Lexar片段:
DOT : '.' ;
ID: [a-zA-Z0-9_]([a-zA-Z0-9_@{}()#$%^~!`'-] | '[' | ']' )*;
错误消息:
命令语法错误。多余的输入“ .1”,期望{,JOB,JOB_OWNER,JOB_TYPE,JOB_STATUS}
有人可以建议我需要进行哪些更改。
答案 0 :(得分:0)
根据您的确切要求,将.
设为ID
中允许的字符之一,或进行更改
(id | DOT | stringWithQuotes)
到
(
id (DOT id)*
| stringWithQuotes
)
现在,您允许带引号的字符串,标识符或单个点-不允许标识符与点混合。