Exemple #1
0
    public LL1Table(InputGrammer inputGrammer) : base(inputGrammer)
    {
        generatedFirst = new GenerateFirst(inputGrammer);
        GenerateFollow generatedFollow = new GenerateFollow(inputGrammer, generatedFirst);

        if (!checkLeft())
        {
            throw new FailToGenerateLL1Exception("含有左递归或左公因子");
        }
        foreach (Production production in inputGrammer.userProductions)
        {
            List <string> firstSetOfRightPart = generatedFirst.getFirstFromPart(production.Values);
            foreach (string token in firstSetOfRightPart.Where(i => (!inputGrammer.nonTerminalTokens.Contains(i) && i != PublicFunc.EPSILON)))
            {
                Item item = new Item(production.Key, token, production.ToString());
                checkConflict(item);
                table.Add(item);
            }
            if (firstSetOfRightPart.Contains(PublicFunc.EPSILON))
            {
                foreach (string token in generatedFollow[production.Key].Where(i => !inputGrammer.nonTerminalTokens.Contains(i)))
                {
                    Item item = new Item(production.Key, token, production.ToString());
                    checkConflict(item);
                    table.Add(item);
                }
            }
        }
    }
Exemple #2
0
    public SLR1Table(DFAGraphBase DFAGraph, InputGrammer inputGrammer) : base(DFAGraph, inputGrammer)
    {
        GenerateFirst generatedFirst = new GenerateFirst(inputGrammer);

        generatedFollow = new GenerateFollow(inputGrammer, generatedFirst);
        generateLRTable();
    }
Exemple #3
0
 private void button2_Click(object sender, EventArgs e)
 {
     try
     {
         InputGrammer   inputGrammer    = new InputGrammer(InputArea.Text);
         GenerateFirst  generatedFirst  = new GenerateFirst(inputGrammer);
         GenerateFollow generatedFollow = new GenerateFollow(inputGrammer, generatedFirst);
         if (formFirstAndFollow == null)
         {
             formFirstAndFollow = new FormFirstAndFollow();
         }
         formFirstAndFollow.getTextData(generatedFollow);
         formFirstAndFollow.Show();
     }
     catch (NoValidGrammerException ee) { MessageBox.Show(ee.Message, ee.Message); }
 }