Package Coco

Source Code of Coco.CocoExecuter

/*******************************************************************************
* Copyright (C) 2006 Christian Wressnegger
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* version 2 as published by the Free Software Foundation.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*******************************************************************************/

package Coco;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.eclipse.core.runtime.Path;

import at.ssw.coco.core.CocoError;
import at.ssw.coco.core.Mapping;

/**
* Handles the execution of the Coco/R. This includes analyzing the output (extracting the error messages)
* <p>
* Note: This class must be in the package Coco due to limitations of the current Coco/R version.
*
* @author Christian Wressnegger <k0356707@students.jku.at>
*
*/
public final class CocoExecuter {

  private CocoExecuter() {
    // private constructor - prevent instantiation of this utility class
  }

  /**
   * Executes Coco/R with the given parameters.
   *
   * @param srcName The atg file name.
   * @param srcDir The source directory.
   * @param outDir The output directory.
   * @param frameDir The directory containing the frame files.
   * @param nsName The parsers package name.
   * @param traceStr The trace string.
   * @return a list of <code>CocoError</code>s.
   */
  public static List<CocoError> execute(String srcName, String srcDir, String outDir,
      String frameDir, String nsName, String traceStr, Mapping mapping) {
    List<CocoError> result = new ArrayList<CocoError>();
    try {
      Scanner scanner = new Scanner(srcName);
      Parser parser = new Parser(scanner);
      parser.errors = new CocoErrors(result);

      parser.trace = new Trace(srcDir);
      parser.tab = new Tab(parser);
      parser.dfa = new DFA(parser);
      parser.pgen = (mapping != null) ?
          new MappingParserGen(parser, mapping) : new ParserGen(parser);

      parser.tab.srcName = srcName;
      parser.tab.srcDir = srcDir;
      parser.tab.nsName = nsName;
      parser.tab.frameDir = frameDir;
      parser.tab.outDir = outDir;
      if (traceStr != null) parser.tab.SetDDT(traceStr);

      parser.Parse();

      parser.trace.Close();

    } catch (FatalError ex) {
      result.add(new CocoError(false, ex.getMessage()));
    }
    return result;
  }
 
  /**
   * Executes Coco/R with the given parameters.
   *
   * @param srcName The atg file name.
   * @param srcDir The source directory.
   * @param outDir The output directory.
   * @param frameDir The directory containing the frame files.
   * @param nsName The parsers package name.
   * @param traceStr The trace string.
   * @return a list of <code>CocoError</code>s.
   */
  public static List<CocoError> execute(InputStream stream, String srcName, String srcDir, String outDir,
      String frameDir, String nsName, String traceStr, Mapping mapping) {
    List<CocoError> result = new ArrayList<CocoError>();
    try {
      Scanner scanner = new Scanner(stream);
      Parser parser = new Parser(scanner);
      parser.errors = new CocoErrors(result);

      parser.trace = new Trace(srcDir);
      parser.tab = new Tab(parser);
      parser.dfa = new DFA(parser);
      parser.pgen = (mapping != null) ?
          new MappingParserGen(parser, mapping) : new ParserGen(parser);

      parser.tab.srcName = srcName;
      parser.tab.srcDir = srcDir;
      parser.tab.nsName = nsName;
      parser.tab.frameDir = frameDir;
      parser.tab.outDir = outDir;
      if (traceStr != null) parser.tab.SetDDT(traceStr);

      parser.Parse();

      parser.trace.Close();

    } catch (FatalError ex) {
      result.add(new CocoError(false, ex.getMessage()));
    }
    return result;
  }
 
  /**
   * Executes Coco/R with the given parameters.
   *
   * @param srcName The atg file name.
   * @param srcDir The source directory.
   * @param outDir The output directory.
   * @param frameDir The directory containing the frame files.
   * @param nsName The parsers package name.
   * @param traceStr The trace string.
   * @return a list of <code>CocoError</code>s.
   */
  public static String generateATGEditorTempParser(InputStream stream, String srcName, String srcDir,
      String frameDir, String nsName, String traceStr) {
    List<CocoError> result = new ArrayList<CocoError>();
    String parserString = new String();
    try {
      Scanner scanner = new Scanner(stream);
      Parser parser = new Parser(scanner);
      parser.errors = new CocoErrors(result);

      parser.trace = new Trace(srcDir);
      parser.tab = new Tab(parser);
      parser.dfa = new DFA(parser);
     
      TemporaryParserGen gen = new TemporaryParserGen(parser);
      parser.pgen = gen;

      parser.tab.srcName = srcName;
      parser.tab.srcDir = srcDir;
      parser.tab.nsName = nsName;
      parser.tab.frameDir = frameDir;
      if (traceStr != null) parser.tab.SetDDT(traceStr);

      parser.Parse();

      parser.trace.Close();
     
      parserString = gen.getParser();
   
    } catch (FatalError ex) {
      result.add(new CocoError(false, ex.getMessage()));
    }
    return parserString;
  }
 
  /**
   * Executes Coco/R with the given parameters.
   *
   * @param srcName The atg file name.
   * @param srcDir The source directory.
   * @param outDir The output directory.
   * @param frameDir The directory containing the frame files.
   * @param nsName The parsers package name.
   * @param traceStr The trace string.
   * @return a list of <code>CocoError</code>s.
   */
  public static Tab generateParserTab(String srcName, String srcDir,
      String frameDir, String nsName, String traceStr) {
    List<CocoError> result = new ArrayList<CocoError>();
    Scanner scanner = new Scanner(srcName);
    Parser parser = new Parser(scanner);
    try {
     
      parser.errors = new CocoErrors(result);

      parser.trace = new Trace(srcDir);
      parser.tab = new Tab(parser);
      parser.dfa = new DFA(parser);
     
      TemporaryParserGen gen = new TemporaryParserGen(parser);
      parser.pgen = gen;

      parser.tab.srcName = srcName;
      parser.tab.srcDir = srcDir;
      parser.tab.nsName = nsName;
      parser.tab.frameDir = frameDir;
      if (traceStr != null) parser.tab.SetDDT(traceStr);

      parser.Parse();

      parser.trace.Close();
   
    } catch (FatalError ex) {
      result.add(new CocoError(false, ex.getMessage()));
    }
    return parser.tab;
  }
 
 
  /**
   * Executes Coco/R with and create config files for the editor.
   *
   * @param srcName The atg file name.
   * @param srcDir The source directory.
   * @param outDir The output directory.
   * @param frameDir The directory containing the frame files.
   * @param nsName The parsers package name.
   * @param traceStr The trace string.
   * @return a list of <code>CocoError</code>s.
   */
  public static Parser generateEditor(String srcName, String srcDir, String outDir,
      String frameDir, String nsName, String traceStr) {
    Scanner scanner = null;
    Parser parser = null;
   
    try {
      scanner = new Scanner(srcName);
      parser = new Parser(scanner);
     
      parser.trace = new Trace(srcDir);
      parser.tab = new Tab(parser);
      parser.dfa = new DFA(parser);
      parser.pgen = new ParserGen(parser);

      parser.tab.srcName = srcName;
      parser.tab.srcDir = srcDir;
      parser.tab.nsName = nsName;
      parser.tab.frameDir = frameDir;
      parser.tab.outDir = outDir;
      if (traceStr != null) parser.tab.SetDDT(traceStr);

      parser.Parse();

      parser.trace.Close();
   
     
     
    } catch (FatalError ex) {
      System.out.println(ex.getMessage());
    }
   
    return parser;

  }
 
}
TOP

Related Classes of Coco.CocoExecuter

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.