Package net.sourceforge.chaperon.model.symbol

Examples of net.sourceforge.chaperon.model.symbol.SymbolList


   *
   * @return Symbol of the next position, otherwise the symbol for an empty list.
   */
  private Symbol getItemNext(int index)
  {
    SymbolList productiondefinition;

    if (positions[index]<((productiondefinition =
                          grammar.getProduction(productions[index]).getDefinition()).getSymbolCount()))
      return productiondefinition.getSymbol(positions[index]);

    return EMPTYLIST;
  }
View Full Code Here


  public SymbolSet getNextTerminals()
  {
    SymbolSet set = new SymbolSet();

    SymbolList productiondefinition;
    for (int item = 0; item<elementCount; item++)
      if ((positions[item]<((productiondefinition =
                            grammar.getProduction(productions[item]).getDefinition()).getSymbolCount())) &&
          (productiondefinition.getSymbol(positions[item]) instanceof Terminal))
        set.addSymbol(productiondefinition.getSymbol(positions[item]));

    return set;
  }
View Full Code Here

  public SymbolSet getNextNonterminals()
  {
    SymbolSet set = new SymbolSet();

    SymbolList productiondefinition;
    for (int item = 0; item<elementCount; item++)
      if ((positions[item]<((productiondefinition =
                            grammar.getProduction(productions[item]).getDefinition()).getSymbolCount())) &&
          (productiondefinition.getSymbol(positions[item]) instanceof Nonterminal))
        set.addSymbol(productiondefinition.getSymbol(positions[item]));

    return set;
  }
View Full Code Here

    return set;
  }

  public Error getNextError()
  {
    SymbolList productiondefinition;
    for (int item = 0; item<elementCount; item++)
      if ((positions[item]<((productiondefinition =
                            grammar.getProduction(productions[item]).getDefinition()).getSymbolCount())) &&
          (productiondefinition.getSymbol(positions[item]) instanceof Error))
        return (Error)productiondefinition.getSymbol(positions[item]);

    return null;
  }
View Full Code Here

      changed = false;

      // for every item in itemset I
      for (int i = 0; i<J.elementCount; i++)
      {
        SymbolList productiondefinition = grammar.getProduction(J.productions[i]).getDefinition();

        // and not A=XYZ^
        if (J.positions[i]<productiondefinition.getSymbolCount())
        {
          Symbol symbol = productiondefinition.getSymbol(J.positions[i])// A=X ^symbol Z

          // for every item [A=u^Bv,a] in J and production B=w in G
          if (symbol instanceof Nonterminal)
          {
            int pos = J.positions[i]+1// for the FIRST set from (va)

            b.clear();

            // if [A=u^Bv,a]
            if (pos<productiondefinition.getSymbolCount())
            {
              // then is b the list of all terminal symbols from FIRST(va)
              do
              {
                if (productiondefinition.getSymbol(pos) instanceof Terminal)
                {
                  b2.clear();
                  b2.addSymbol(productiondefinition.getSymbol(pos));
                }
                else
                {
                  b2.clear();
                  b2.addSymbol(firstsets.getFirstSet(productiondefinition.getSymbol(pos)));
                }

                b.addSymbol(b2);
                pos++;
              }
              while ((b2.contains(EMPTYLIST)) && (pos<productiondefinition.getSymbolCount()));

              if (b.contains(EMPTYLIST))
                b.addSymbol(J.lookaheads[i]);

              b.removeSymbol(EMPTYLIST);
            }
            else if (pos>=productiondefinition.getSymbolCount())

              // otherwise is b FIRST(a)
              b.addSymbol(J.lookaheads[i]);

            // list of all productions B
View Full Code Here

   */
  public String toString()
  {
    StringBuffer buffer = new StringBuffer();

    SymbolList list;

    for (int production = 0; production<grammar.getProductionCount(); production++)
    {
      list = grammar.getProduction(production).getDefinition();

      for (int position = 0; position<=list.getSymbolCount(); position++)
      {
        for (int item = 0; item<elementCount; item++)
          if ((productions[item]==production) && (positions[item]==position))
          {
            buffer.append(grammar.getProduction(production).getSymbol());
            buffer.append(" -> ");

            for (int i = 0; i<list.getSymbolCount(); i++)
            {
              if (i==position)
                buffer.append(".");

              buffer.append(list.getSymbol(i)+" ");
            }

            if (position==list.getSymbolCount())
              buffer.append(".");

            buffer.append(" , ");
            for (int lookahead = 0; lookahead<lookaheads[item].getSymbolCount(); lookahead++)
            {
View Full Code Here

    IntegerList productions = grammar.getProductionList(symbol);
    SymbolSet examined = new SymbolSet()// List of all examined symbols

    for (int i = 0; i<productions.getCount(); i++)
    {
      SymbolList productiondefinition = grammar.getProduction(productions.get(i)).getDefinition();
      if (productiondefinition.getSymbolCount()==0)

        // Symbol for a empty firstset added
        firstset.addSymbol(EMPTYLIST);
      else
      {
        // for every symbol in the production
        int j = 0;
        Symbol newsymbol;
        boolean foundEmptyList;
        do
        {
          foundEmptyList = true;
          newsymbol = productiondefinition.getSymbol(j);
          if (newsymbol instanceof Terminal)

            // if a terminal symbol
            firstset.addSymbol(newsymbol);
          else if (!newsymbol.equals(symbol))
          {
            // and if a non terminal symbol
            if (!examined.contains(newsymbol))
            {
              SymbolSet newfirstset = first(newsymbol, visited);
              foundEmptyList = newfirstset.contains(EMPTYLIST);
              for (int k = 0; k<newfirstset.getSymbolCount(); k++)
                if (!newfirstset.getSymbol(k).equals(EMPTYLIST))
                  firstset.addSymbol(newfirstset.getSymbol(k));

              examined.addSymbol(newsymbol);
            }
          }

          j++;
        }
        while ((!(newsymbol instanceof Terminal)) && (foundEmptyList) &&
               (j<productiondefinition.getSymbolCount()) &&
               (!productiondefinition.getSymbol(j-1).equals(symbol)));
      }
    }

    return firstset;
  }
View Full Code Here

    if (symbol.equals(grammar.getStartSymbol()))
      followset.addSymbol(new EndOfFile());

    // if production A -> a B b exists, then add every symbol of
    // FIRST(b) except the symbol for an empty list to FOLLOW(B)
    SymbolList definition;
    for (int production = 0; production<grammar.getProductionCount(); production++)
    {
      definition = grammar.getProduction(production).getDefinition();
      for (int position = 0; position<definition.getSymbolCount(); position++)
        if (definition.getSymbol(position).equals(symbol))
        {
          System.out.println("Found "+symbol+" at position "+position+" in production "+production);

          SymbolSet firstset = null;
          if ((position+1)<definition.getSymbolCount())
          {
            SymbolList rest = new SymbolList();
            for (int restposition = position+1; restposition<definition.getSymbolCount();
                 restposition++)
              rest.addSymbol(definition.getSymbol(restposition));

            firstset = firstsets.getFirstSet(rest);

            System.out.println("first("+rest+")="+firstset);
View Full Code Here

    productions = newProductions;
    positions = newPositions;

    // buildind closure for every item in state I
    SymbolList productiondefinition = production.getDefinition();

    // and not A=uv^w and w ist not empty
    if (position<productiondefinition.getSymbolCount())
    {
      Symbol symbol = productiondefinition.getSymbol(position)// A=u ^symbol w

      // for every item [A=u^Bv,a] in J and production B=w in G
      if (symbol instanceof Nonterminal)
      {
        // list of all productions B
View Full Code Here

   *
   * @return Symbol of the next position, otherwise the symbol for an empty list.
   */
  private Symbol getNextSymbol(int index)
  {
    SymbolList productiondefinition;

    if (positions[index]<((productiondefinition = productions[index].getDefinition()).getSymbolCount()))
      return productiondefinition.getSymbol(positions[index]);

    return EMPTYLIST;
  }
View Full Code Here

TOP

Related Classes of net.sourceforge.chaperon.model.symbol.SymbolList

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.