Package wyvern.tools.parsing

Source Code of wyvern.tools.parsing.FirstChanger

package wyvern.tools.parsing;

import edu.umn.cs.melt.copper.compiletime.skins.cup.CupSkinParser;
import edu.umn.cs.melt.copper.compiletime.spec.grammarbeans.CopperElementName;
import edu.umn.cs.melt.copper.compiletime.spec.grammarbeans.CopperElementReference;
import edu.umn.cs.melt.copper.compiletime.spec.grammarbeans.ParserBean;
import edu.umn.cs.melt.copper.main.CopperIOType;
import edu.umn.cs.melt.copper.main.ParserCompiler;
import edu.umn.cs.melt.copper.main.ParserCompilerParameters;
import edu.umn.cs.melt.copper.runtime.engines.semantics.VirtualLocation;
import edu.umn.cs.melt.copper.runtime.io.Location;
import edu.umn.cs.melt.copper.runtime.logging.CopperException;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.text.ParseException;

public class FirstChanger extends Task {
  private File original;
  private File target;
  private String newFC;
  private String hostGrammar;

  private String newPackage;
  private String newName;
  private String extraPackage;

  public void setOriginal(File file) {
    original = file;
  }

  public void setTarget(File file) {
    target = file;
  }

  public void setNewfc(String fc) {
    this.newFC = fc;
  }

  public void setHostgrammar(String hostGrammar) {
    this.hostGrammar = hostGrammar;
  }

  public void setNewpackage(String newPackage) {
    this.newPackage = newPackage;
  }

  public void setNewname(String newName) {
    this.newName = newName;
  }

  public void setExtrapackage(String extraPackage) {
    this.extraPackage = extraPackage;
  }

  @Override
  public void execute() throws BuildException {
    ParserBean host;
    try (InputStream is = new FileInputStream(original)) {
      host = new CupSkinParser().parse(new InputStreamReader(is), original.getName());
    } catch (Exception e) {
      throw new BuildException(e);
    }

    Location newFCLoc = null;
    try {
      newFCLoc = host.getGrammar(CopperElementName.newName("_" + hostGrammar))
          .getGrammarElement(CopperElementName.newName(newFC)).getLocation();
      host.setStartSymbol(CopperElementReference.ref(CopperElementName.newName("_" + hostGrammar), newFC, newFCLoc));
    } catch (ParseException e) {
      throw new BuildException(e);
    }

    host.setClassName(newName);
    host.setPackageDecl(newPackage);

    if (!extraPackage.isEmpty())
      host.setPreambleCode("import "+extraPackage+";"+host.getPreambleCode());

    ParserCompilerParameters pcp = new ParserCompilerParameters();
    pcp.setOutputFile(target);
    pcp.setOutputType(CopperIOType.FILE);

    try {
      ParserCompiler.compile(host, pcp);
    } catch (CopperException e) {
      throw new BuildException(e);
    }
  }

}
TOP

Related Classes of wyvern.tools.parsing.FirstChanger

TOP
Copyright © 2018 www.massapi.com. 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.