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)); }
public override IList <SrcOp> Set(GrammarAST setAST, GrammarAST labelAST, bool invert) { MatchSet matchOp; if (invert) { matchOp = new MatchNotSet(this, setAST); } else { matchOp = new MatchSet(this, setAST); } if (labelAST != null) { string label = labelAST.Text; RuleFunction rf = GetCurrentRuleFunction(); if (labelAST.Parent.Type == ANTLRParser.PLUS_ASSIGN) { DefineImplicitLabel(setAST, matchOp); TokenListDecl l = GetTokenListLabelDecl(label); rf.AddContextDecl(setAST.GetAltLabel(), l); } else { Decl d = GetTokenLabelDecl(label); matchOp.labels.Add(d); rf.AddContextDecl(setAST.GetAltLabel(), d); } } if (controller.NeedsImplicitLabel(setAST, matchOp)) { DefineImplicitLabel(setAST, matchOp); } AddToLabelList listLabelOp = GetAddToListOpIfListLabelPresent(matchOp, labelAST); return(List(matchOp, listLabelOp)); }