如何知道父上下文中的匹配备选方案?



我如何在父上下文中知道匹配的替代项,例如在我的语法中

simpleAssign: name = ID  '=' value = (STRING | BOOLEAN | INTEGER | DOUBLE );
simpleReference: name = ID '=' value = ID;
listAssign: name = ID  '=' value = listString #listStringAssign;
assign: simpleAssign       #simpleVariableAssign
| listAssign         #listOfVariableAssign
| simpleReference    #referenceToVariable
;
assignVariableBlock: assign +   #assignVariabels;

我想知道在我的函数中输入分配变量块匹配的替代方案。

@Override public void enterAssignVariableBlock(StudyParser.AssignVariableBlockContext ctx) {
// switch matched alternative (simpleVariableAssign | listOfVariableAssign | referenceToVariable ) do
}

enter...方法不会被称为enterAssignVariableBlock (...),而是enterAssignVariabels(...),因为您通过#assignVariabels将其标记为这样。

尽管理想情况下,父级不应关心其子级的具体实现,但以下是从父规则中找出类型的方法:

@Override
public void enterAssignVariabels(StudyParser.AssignVariabelsContext ctx) {
for (StudyParser.AssignContext childCtx : ctx.assign()) {
if (childCtx instanceof StudyParser.SimpleVariableAssignContext) {
// #simpleVariableAssign
}
else if (childCtx instanceof StudyParser.ListOfVariableAssignContext) {
// #listOfVariableAssign
}
else {
// #referenceToVariable
}
}
}

相关内容

  • 没有找到相关文章

最新更新