RuleTransition ruleTrans = (RuleTransition)ast.atnState.transition(0);
stateNumber = ast.atnState.stateNumber;
}
this.name = ast.getText();
CodeGenerator gen = factory.getGenerator();
Rule r = factory.getGrammar().getRule(name);
ctxName = gen.getTarget().getRuleFunctionContextStructName(r);
// TODO: move to factory
RuleFunction rf = factory.getCurrentRuleFunction();
if ( labelAST!=null ) {
// for x=r, define <rule-context-type> x and list_x
String label = labelAST.getText();
if ( labelAST.parent.getType() == ANTLRParser.PLUS_ASSIGN ) {
factory.defineImplicitLabel(ast, this);
String listLabel = gen.getTarget().getListLabel(label);
RuleContextListDecl l = new RuleContextListDecl(factory, listLabel, ctxName);
rf.addContextDecl(ast.getAltLabel(), l);
}
else {
RuleContextDecl d = new RuleContextDecl(factory,label,ctxName);
labels.add(d);
rf.addContextDecl(ast.getAltLabel(), d);
}
}
ActionAST arg = (ActionAST)ast.getFirstChildWithType(ANTLRParser.ARG_ACTION);
if ( arg != null ) {
argExprsChunks = ActionTranslator.translateAction(factory, rf, arg.token, arg);
}
// If action refs rule as rulename not label, we need to define implicit label
if ( factory.getCurrentOuterMostAlt().ruleRefsInActions.containsKey(ast.getText()) ) {
String label = gen.getTarget().getImplicitRuleLabel(ast.getText());
RuleContextDecl d = new RuleContextDecl(factory,label,ctxName);
labels.add(d);
rf.addContextDecl(ast.getAltLabel(), d);
}
}