我在 Eclipse 环境中使用 ANTLR。我想将一个属性 ( n.text
) 传递给另一个规则 ( description
),并在后一个规则中使用语义谓词来验证与n.text
. 这是我的代码:
useCaseSpecification
: n=useCase '='
description[$n.text]
;
useCase
: ucID=('UC' INTEGER)? ucName
;
ucName
: caren io
;
caren
: 'create' | 'creates' | alter | read | 'erase' | 'erases' | notify
;
/* ..more code */
description[String str]
: 'Description' ':' primaryActor (useCase {str==$useCase.text}?) /* more grammar */
;
我尝试了语义谓词表达式的许多替代方案,例如{str.equals($useCase.text)}
,但没有。解析器似乎没有进行验证。
当我使用示例运行解释器时,它允许 useCase 类型的每个输入。例如,如果输入是:
创建处方 = 描述:医生开处方 /* ... */
那应该是正确的。
如果输入,是:
创建处方 = 描述:一个医生创建一个Rrrrescription /* ... */
那应该是错误的。