/**
 * @(#)Grammar.java	17.03.2004
 * 
 * @author kst
 */
package commons.chartparser;
import java.util.List;
/**
 * Abstrakte Parser-Superklasse. Die konkreten Implementierungen (ChartParser) werden von dieser
 * Klasse abgeleitet und implementieren die Methode parse(ArrayList satz).
 */
@SuppressWarnings("unchecked")
public abstract class Parser
{

Lex            lexicon      = null;
Grammar        grammar      = null;
String         startElement = null; // Wird aus der Grammatik berechnet.
List           sentence     = null; // Der jeweils geparste Satz.
// drucken der chart-eintraege abschalten:
public boolean quiet        = false;

public abstract STree parse (List satz);

public abstract String checkResult ();

public void setGrammar (Grammar g)
{
   grammar = g;
   startElement = grammar.startElement();
}

public String getStartElement ()
{
   return startElement;
}

public Grammar getGrammar ()
{
   return grammar;
}

public void setLexicon (Lex l)
{
   lexicon = l;
}

public Lex getLexicon ()
{
   return lexicon;
}

public void setSentence (List s)
{
   sentence = s;
}

public List getSentence ()
{
   return sentence;
}

@SuppressWarnings("unchecked")
public static Parser getParser (Grammar G, Lex L, String parser)
{
   String parserclass = "jnlp.parser." + parser.trim() + "Parser";
   Class clazz = null;
   Parser P = null;
   try
   {
      clazz = Class.forName(parserclass);
   }
   catch (ClassNotFoundException e)
   {
      Main.debug("Parser not found: " + parserclass);
   }
   if (clazz != null)
   {
      try
      {
         P = (Parser) clazz.newInstance();
      }
      catch (IllegalAccessException e)
      {
         Main.debug("No access: " + clazz.getName());
      }
      catch (InstantiationException e)
      {
         Main.debug("Instantiation failed: " + clazz.getName());
      }
      if (P != null)
      {
         try
         {
            P.setLexicon(L);
            P.setGrammar(G);
         }
         catch (Exception e)
         {
            Main.debug("Parser gefunden, Fehler beim Initialisieren.");
         }
      }
   }
   return P;
}
}