Пример #1
0
    public string GetProductionString(GrammarProduction production)
    {
        string productionString = "<";

        if (production.GetLeftSide() != null)
        {
            productionString += production.GetLeftSide().GetSymbol();
        }
        productionString += "> → ";
        if (production.GetRightSide().Count == 0)
        {
            productionString += "λ";
        }
        else
        {
            foreach (GrammarElement element in production.GetRightSide())
            {
                if (element.IsNonTerminal())
                {
                    productionString += "<" + element.GetSymbol() + ">";
                }
                else
                {
                    productionString += element.GetSymbol();
                }
            }
        }
        return(productionString);
    }
Пример #2
0
    public void ElementClick(GameObject elementButton)
    {
        GrammarElement currentElement = elements[elementButton];

        if (currentProduction == null)
        {
            currentProduction = new GrammarProduction(null, new List <GrammarElement>());
        }

        if (currentProduction.GetLeftSide() == null)
        {
            if (currentElement.IsNonTerminal())
            {
                currentProduction.SetLeftSide(currentElement);
            }
        }
        else
        {
            currentProduction.GetRightSide().Add(currentElement);
        }

        if (!newProduction)
        {
            currentProductionButton.transform.parent.GetChild(1).GetComponentInChildren <Text>().text = GetProductionString(currentProduction);
        }
        currentProductionText.text = GetProductionString(currentProduction);
    }
Пример #3
0
 public bool EvaluateProductionExistence(GrammarProduction production)
 {
     foreach (KeyValuePair <GameObject, GrammarProduction> p in productions)
     {
         if (p.Value.GetLeftSide() == production.GetLeftSide() && (p.Value.GetRightSide().Count == production.GetRightSide().Count))
         {
             int  c         = 0;
             bool different = false;
             List <GrammarElement> rightSide1 = p.Value.GetRightSide();
             List <GrammarElement> rightSide2 = production.GetRightSide();
             while (c < rightSide1.Count)
             {
                 if (rightSide1[c] != rightSide2[c])
                 {
                     different = true;
                     break;
                 }
                 c++;
             }
             if (!different)
             {
                 return(true);
             }
         }
     }
     return(false);
 }