public override IList<SrcOp> TokenRef(GrammarAST ID, GrammarAST labelAST, GrammarAST args)
{
MatchToken matchOp = new MatchToken(this, (TerminalAST)ID);
if (labelAST != null)
{
string label = labelAST.Text;
RuleFunction rf = GetCurrentRuleFunction();
if (labelAST.Parent.Type == ANTLRParser.PLUS_ASSIGN)
{
// add Token _X and List<Token> X decls
DefineImplicitLabel(ID, matchOp); // adds _X
TokenListDecl l = GetTokenListLabelDecl(label);
rf.AddContextDecl(ID.GetAltLabel(), l);
}
else
{
Decl d = GetTokenLabelDecl(label);
matchOp.labels.Add(d);
rf.AddContextDecl(ID.GetAltLabel(), d);
}
// Decl d = getTokenLabelDecl(label);
// ((MatchToken)matchOp).labels.add(d);
// getCurrentRuleFunction().addContextDecl(ID.getAltLabel(), d);
// if ( labelAST.parent.getType() == ANTLRParser.PLUS_ASSIGN ) {
// TokenListDecl l = getTokenListLabelDecl(label);
// getCurrentRuleFunction().addContextDecl(ID.getAltLabel(), l);
// }
}
if (controller.NeedsImplicitLabel(ID, matchOp))
DefineImplicitLabel(ID, matchOp);
AddToLabelList listLabelOp = GetAddToListOpIfListLabelPresent(matchOp, labelAST);
return List(matchOp, listLabelOp);
}