解析包含点 (.) 的输入字符串未在 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
)

就像现在一样,您允许使用带引号的字符串、标识符或单个点 - 而不是标识符与点的混合。