Package org.antlr.v4.codegen.model

Examples of org.antlr.v4.codegen.model.CodeBlockForOuterMostAlt


  @Override
  public Choice getComplexEBNFBlock(GrammarAST ebnfRoot, List<CodeBlockForAlt> alts) {
    int ebnf = 0;
    if ( ebnfRoot!=null ) ebnf = ebnfRoot.getType();
    Choice c = null;
    switch ( ebnf ) {
      case ANTLRParser.OPTIONAL :
        c = new OptionalBlock(this, ebnfRoot, alts);
        break;
      case ANTLRParser.CLOSURE :
View Full Code Here


  }

  @Override
  public CodeBlockForAlt alternative(Alternative alt, boolean outerMost) {
    if ( outerMost ) return new CodeBlockForOuterMostAlt(this, alt);
    return new CodeBlockForAlt(this);
  }
View Full Code Here

    return alternative(alt, outerMost);
  }

  @Override
  public CodeBlockForAlt alternative(Alternative alt, boolean outerMost) {
    if ( outerMost ) return new CodeBlockForOuterMostAlt(this, alt);
    return new CodeBlockForAlt(this);
  }
View Full Code Here

    // now inject code to start alts
    CodeGenerator gen = delegate.getGenerator();
    STGroup codegenTemplates = gen.getTemplates();

    // pick out alt(s) for primaries
    CodeBlockForOuterMostAlt outerAlt = (CodeBlockForOuterMostAlt)function.code.get(0);
    List<CodeBlockForAlt> primaryAltsCode = new ArrayList<CodeBlockForAlt>();
    SrcOp primaryStuff = outerAlt.ops.get(0);
    if ( primaryStuff instanceof Choice ) {
      Choice primaryAltBlock = (Choice) primaryStuff;
      primaryAltsCode.addAll(primaryAltBlock.alts);
    }
    else { // just a single alt I guess; no block
      primaryAltsCode.add((CodeBlockForAlt)primaryStuff);
    }

    // pick out alt(s) for op alts
    StarBlock opAltStarBlock = (StarBlock)outerAlt.ops.get(1);
    CodeBlockForAlt altForOpAltBlock = opAltStarBlock.alts.get(0);
    List<CodeBlockForAlt> opAltsCode = new ArrayList<CodeBlockForAlt>();
    SrcOp opStuff = altForOpAltBlock.ops.get(0);
    if ( opStuff instanceof AltBlock ) {
      AltBlock opAltBlock = (AltBlock)opStuff;
      opAltsCode.addAll(opAltBlock.alts);
    }
    else { // just a single alt I guess; no block
      opAltsCode.add((CodeBlockForAlt)opStuff);
    }

    // Insert code in front of each primary alt to create specialized ctx if there was a label
    for (int i = 0; i < primaryAltsCode.size(); i++) {
      LeftRecursiveRuleAltInfo altInfo = r.recPrimaryAlts.get(i);
      if ( altInfo.altLabel==null ) continue;
      ST altActionST = codegenTemplates.getInstanceOf("recRuleReplaceContext");
      altActionST.add("ctxName", Utils.capitalize(altInfo.altLabel));
      Action altAction =
        new Action(delegate, function.altLabelCtxs.get(altInfo.altLabel), altActionST);
      CodeBlockForAlt alt = primaryAltsCode.get(i);
      alt.insertOp(0, altAction);
    }

    // Insert code to set ctx.stop after primary block and before op * loop
    ST setStopTokenAST = codegenTemplates.getInstanceOf("recRuleSetStopToken");
    Action setStopTokenAction = new Action(delegate, function.ruleCtx, setStopTokenAST);
    outerAlt.insertOp(1, setStopTokenAction);

    // Insert code to set _prevctx at start of * loop
    ST setPrevCtx = codegenTemplates.getInstanceOf("recRuleSetPrevCtx");
    Action setPrevCtxAction = new Action(delegate, function.ruleCtx, setPrevCtx);
    opAltStarBlock.addIterationOp(setPrevCtxAction);
View Full Code Here

  @Override
  public List<SrcOp> sempred(ActionAST ast) { return list(new SemPred(this, ast)); }

  @Override
  public List<SrcOp> ruleRef(GrammarAST ID, GrammarAST label, GrammarAST args) {
    InvokeRule invokeOp = new InvokeRule(this, ID, label);
    // If no manual label and action refs as token/rule not label, we need to define implicit label
    if ( controller.needsImplicitLabel(ID, invokeOp) ) defineImplicitLabel(ID, invokeOp);
    AddToLabelList listLabelOp = getAddToListOpIfListLabelPresent(invokeOp, label);
    return list(invokeOp, listLabelOp);
  }
View Full Code Here

    return getComplexEBNFBlock(ebnfRoot, alts);
  }

  @Override
  public Choice getLL1ChoiceBlock(BlockAST blkAST, List<CodeBlockForAlt> alts) {
    return new LL1AltBlock(this, blkAST, alts);
  }
View Full Code Here

    if ( ebnfRoot!=null ) ebnf = ebnfRoot.getType();
    Choice c = null;
    switch ( ebnf ) {
      case ANTLRParser.OPTIONAL :
        if ( alts.size()==1 ) c = new LL1OptionalBlockSingleAlt(this, ebnfRoot, alts);
        else c = new LL1OptionalBlock(this, ebnfRoot, alts);
        break;
      case ANTLRParser.CLOSURE :
        if ( alts.size()==1 ) c = new LL1StarBlockSingleAlt(this, ebnfRoot, alts);
        else c = getComplexEBNFBlock(ebnfRoot, alts);
        break;
View Full Code Here

    int ebnf = 0;
    if ( ebnfRoot!=null ) ebnf = ebnfRoot.getType();
    Choice c = null;
    switch ( ebnf ) {
      case ANTLRParser.OPTIONAL :
        if ( alts.size()==1 ) c = new LL1OptionalBlockSingleAlt(this, ebnfRoot, alts);
        else c = new LL1OptionalBlock(this, ebnfRoot, alts);
        break;
      case ANTLRParser.CLOSURE :
        if ( alts.size()==1 ) c = new LL1StarBlockSingleAlt(this, ebnfRoot, alts);
        else c = getComplexEBNFBlock(ebnfRoot, alts);
View Full Code Here

      case ANTLRParser.CLOSURE :
        if ( alts.size()==1 ) c = new LL1StarBlockSingleAlt(this, ebnfRoot, alts);
        else c = getComplexEBNFBlock(ebnfRoot, alts);
        break;
      case ANTLRParser.POSITIVE_CLOSURE :
        if ( alts.size()==1 ) c = new LL1PlusBlockSingleAlt(this, ebnfRoot, alts);
        else c = getComplexEBNFBlock(ebnfRoot, alts);
        break;
    }
    return c;
  }
View Full Code Here

      case ANTLRParser.OPTIONAL :
        if ( alts.size()==1 ) c = new LL1OptionalBlockSingleAlt(this, ebnfRoot, alts);
        else c = new LL1OptionalBlock(this, ebnfRoot, alts);
        break;
      case ANTLRParser.CLOSURE :
        if ( alts.size()==1 ) c = new LL1StarBlockSingleAlt(this, ebnfRoot, alts);
        else c = getComplexEBNFBlock(ebnfRoot, alts);
        break;
      case ANTLRParser.POSITIVE_CLOSURE :
        if ( alts.size()==1 ) c = new LL1PlusBlockSingleAlt(this, ebnfRoot, alts);
        else c = getComplexEBNFBlock(ebnfRoot, alts);
View Full Code Here

TOP

Related Classes of org.antlr.v4.codegen.model.CodeBlockForOuterMostAlt

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.