我正在尝试使用 ANTLR 对 mqsi 命令建模,但遇到了以下问题。mqsicreateconfigurableservice 的文档针对 queuePrefix 说:“前缀可以包含在 WebSphere® MQ 队列名称中有效的任何字符,但不得超过八个字符,并且不得以句点 (.) 开头或结尾。例如, SET.1 有效,但 .SET1 和 SET1. 无效。多个可配置服务可以使用相同的队列前缀。”
作为权宜之计,我使用了以下方法,但这种技术意味着我必须至少有两个字符的名称,这似乎是一个非常浪费且不可扩展的解决方案。有没有更好的方法?
请参阅下面的“queuePrefixValue”...
谢谢 :o)
parser grammar mqsicreateconfigurableservice;
mqsicreateconfigurableservice
: 'mqsicreateconfigurableservice' ' '+ params
;
params : (broker ' '+ switches+)
;
broker : validChar+
;
switches
: AggregationConfigurableService
;
AggregationConfigurableService
: (objectName ' '+ AggregationNameValuePropertyPair)
;
objectName
: (' '+ '-o' ' '+ validChar+)
;
AggregationNameValuePropertyPair
: (' '+ '-n' ' '+ 'queuePrefix' ' '+ '-v' ' '+ queuePrefixValue)?
(' '+ '-n' ' '+ 'timeoutSeconds' ' '+ '-v' ' '+ timeoutSecondsValue)?
;
// I'm not satisfied with this rule as it means at least two digits are mandatory
//Couldn't see how to use regex or semantic predicates which appear to offer a solution
queuePrefixValue
: validChar (validChar | '.')? (validChar | '.')? (validChar | '.')? (validChar | '.')? (validChar | '.')? (validChar | '.')? validChar
;
timeoutSecondsValue //a positive integer
: ('0'..'9')+
;
//This char list is just a temporary subset which eventually needs to reflect all the WebSphere acceptable characters, apart from the dot '.'
validChar
: (('a'..'z')|('A'..'Z')|('0'..'9'))
;