Package org.antlr.v4.codegen

Examples of org.antlr.v4.codegen.CodeGenerator


    if ( !recRuleTemplates.isDefined("recRule") ) {
      tool.errMgr.toolError(ErrorType.MISSING_CODE_GEN_TEMPLATES, "LeftRecursiveRules");
    }

    // use codegen to get correct language templates; that's it though
    CodeGenerator gen = new CodeGenerator(tool, null, language);
    codegenTemplates = gen.getTemplates();
  }
View Full Code Here


  public LexerATNFactory(LexerGrammar g) {
    super(g);
    // use codegen to get correct language templates for lexer commands
    String language = g.getOptionString("language");
    CodeGenerator gen = new CodeGenerator(g.tool, null, language);
    codegenTemplates = gen.getTemplates();
  }
View Full Code Here

      ATNFactory factory = new ParserATNFactory(g);
      if (g.isLexer()) factory = new LexerATNFactory((LexerGrammar) g);
      g.atn = factory.createATN();

      CodeGenerator gen = new CodeGenerator(g);
      ST outputFileST = gen.generateParser();

//      STViz viz = outputFileST.inspect();
//      try {
//        viz.waitForClose();
//      }
View Full Code Here

  public List<Decl> labels = new ArrayList<Decl>();

  public MatchToken(OutputModelFactory factory, TerminalAST ast) {
    super(factory, ast);
    Grammar g = factory.getGrammar();
    CodeGenerator gen = factory.getGenerator();
    ttype = g.getTokenType(ast.getText());
    name = gen.getTarget().getTokenTypeAsTargetLabel(g, ttype);
  }
View Full Code Here

      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);
    }
  }
View Full Code Here

    }
    else {
      superClass = null;
    }

    CodeGenerator gen = factory.getGenerator();
    tokenNames = translateTokenStringsToTarget(g.getTokenDisplayNames(), gen);
    literalNames = translateTokenStringsToTarget(g.getTokenLiteralNames(), gen);
    symbolicNames = translateTokenStringsToTarget(g.getTokenSymbolicNames(), gen);
  }
View Full Code Here

public class LeftRecursiveRuleFunction extends RuleFunction {
  public LeftRecursiveRuleFunction(OutputModelFactory factory, LeftRecursiveRule r) {
    super(factory, r);

    CodeGenerator gen = factory.getGenerator();
    // Since we delete x=lr, we have to manually add decls for all labels
    // on left-recur refs to proper structs
    for (Pair<GrammarAST,String> pair : r.leftRecursiveRuleRefLabels) {
      GrammarAST idAST = pair.a;
      String altLabel = pair.b;
      String label = idAST.getText();
      GrammarAST rrefAST = (GrammarAST)idAST.getParent().getChild(1);
      if ( rrefAST.getType() == ANTLRParser.RULE_REF ) {
        Rule targetRule = factory.getGrammar().getRule(rrefAST.getText());
        String ctxName = gen.getTarget().getRuleFunctionContextStructName(targetRule);
        RuleContextDecl d;
        if (idAST.getParent().getType() == ANTLRParser.ASSIGN) {
          d = new RuleContextDecl(factory, label, ctxName);
        }
        else {
View Full Code Here

    assert ast.atnState != null
      && ast.atnState.getNumberOfTransitions() == 1
      && ast.atnState.transition(0) instanceof AbstractPredicateTransition;

    GrammarAST failNode = ast.getOptionAST("fail");
    CodeGenerator gen = factory.getGenerator();
    predicate = ast.getText();
    if (predicate.startsWith("{") && predicate.endsWith("}?")) {
      predicate = predicate.substring(1, predicate.length() - 2);
    }
    predicate = gen.getTarget().getTargetStringLiteralFromString(predicate);

    if ( failNode==null ) return;

    if ( failNode instanceof ActionAST ) {
      ActionAST failActionNode = (ActionAST)failNode;
      RuleFunction rf = factory.getCurrentRuleFunction();
      failChunks = ActionTranslator.translateAction(factory, rf,
                              failActionNode.token,
                              failActionNode);
    }
    else {
      msg = gen.getTarget().getTargetStringLiteralFromANTLRStringLiteral(gen,
                                      failNode.getText(),
                                      true);
    }
  }
View Full Code Here

      ATNFactory factory = new ParserATNFactory(g);
      if ( g.isLexer() ) factory = new LexerATNFactory((LexerGrammar)g);
      g.atn = factory.createATN();

      CodeGenerator gen = new CodeGenerator(g);
      ST outputFileST = gen.generateParser();
      String output = outputFileST.render();
      //System.out.println(output);
      String b = "#" + actionName + "#";
      int start = output.indexOf(b);
      String e = "#end-" + actionName + "#";
View Full Code Here

    public BuildDependencyGenerator(Tool tool, Grammar g) {
        this.tool = tool;
    this.g = g;
    String language = g.getOptionString("language");
    generator = new CodeGenerator(tool, g, language);
    }
View Full Code Here

TOP

Related Classes of org.antlr.v4.codegen.CodeGenerator

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.