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); } } } }
public SLR1Table(DFAGraphBase DFAGraph, InputGrammer inputGrammer) : base(DFAGraph, inputGrammer) { GenerateFirst generatedFirst = new GenerateFirst(inputGrammer); generatedFollow = new GenerateFollow(inputGrammer, generatedFirst); generateLRTable(); }
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); } }