public TableWith() { value = null; error = new LrAction(LrAction.Type.Error); string empty = Empty().type; actions = new Dictionary <Tuple <int, string>, LrAction>() { { Tuple.Create(0, "number"), new LrAction(LrAction.Type.Shift, 3) }, { Tuple.Create(1, empty), new LrAction(LrAction.Type.Accept) }, { Tuple.Create(2, "binop"), new LrAction(LrAction.Type.Shift, 4) }, { Tuple.Create(2, empty), new LrAction(LrAction.Type.Reduce, 0, "{<binop>,<number>}") }, { Tuple.Create(3, "binop"), new LrAction(LrAction.Type.Reduce, 1, "number") }, { Tuple.Create(3, empty), new LrAction(LrAction.Type.Reduce, 1, "number") }, { Tuple.Create(4, "number"), new LrAction(LrAction.Type.Reduce, 1, "binop") }, { Tuple.Create(5, empty), new LrAction(LrAction.Type.Reduce, 2, "expr") }, { Tuple.Create(6, "number"), new LrAction(LrAction.Type.Shift, 3) }, { Tuple.Create(7, "binop"), new LrAction(LrAction.Type.Shift, 4) }, { Tuple.Create(7, empty), new LrAction(LrAction.Type.Reduce, 0, "{<binop>,<number>}") }, { Tuple.Create(8, empty), new LrAction(LrAction.Type.Reduce, 3, "{<binop>,<number>}") }, }; gotos = new Dictionary <Tuple <int, string>, LrAction>() { { Tuple.Create(0, "expr"), new LrAction(LrAction.Type.Goto, 1) }, { Tuple.Create(0, "number"), new LrAction(LrAction.Type.Goto, 2) }, { Tuple.Create(2, "binop"), new LrAction(LrAction.Type.Goto, 6) }, { Tuple.Create(2, "{<binop>,<number>}"), new LrAction(LrAction.Type.Goto, 5) }, { Tuple.Create(6, "number"), new LrAction(LrAction.Type.Goto, 7) }, { Tuple.Create(7, "binop"), new LrAction(LrAction.Type.Goto, 6) }, { Tuple.Create(7, "{<binop>,<number>}"), new LrAction(LrAction.Type.Goto, 8) }, }; }
/// <summary> /// Populates the actions for each state and symbol combination. /// </summary> private void FillActions() { var acceptProduction = Grammar.Productions[0]; foreach (var state in LrStates) { try { var actions = new LrAction[state.Gotos.Count]; for (var sym = 0; sym < Grammar.Tokens.Length; sym++) { var possibleActions = new ActionSet(); var target = state.Gotos[sym]; if (target != null) { if (Terminals.Contains(sym)) { possibleActions.Add(LrAction.Shift(target, state.GotoPrecedences[sym])); } if (NonTerminals.Contains(sym)) { possibleActions.Add(LrAction.Goto(target, state.GotoPrecedences[sym])); } } foreach (var item in state.Items) { if (item.LookAheadSymbol != sym) { continue; } if (item.CanIncrement == false) { if (item.Production == acceptProduction && item.ProductionProgress == 1) { possibleActions.Add(LrAction.Accept()); } else { possibleActions.Add(LrAction.Reduce(item.Production, item.Production.Precedence)); } } } SetAction(actions, sym, possibleActions); } state.Actions = actions; } catch (Exception ex) { throw new Exception($"Error processing state: {state}", ex); } } }
public TableWithout() { value = null; error = new LrAction(LrAction.Type.Error); actions = new Dictionary <Tuple <int, char>, LrAction>() { { Tuple.Create(0, '1'), new LrAction(LrAction.Type.Shift, 2) }, { Tuple.Create(0, '2'), new LrAction(LrAction.Type.Shift, 3) }, { Tuple.Create(0, '3'), new LrAction(LrAction.Type.Shift, 4) }, { Tuple.Create(0, '4'), new LrAction(LrAction.Type.Shift, 5) }, { Tuple.Create(0, '5'), new LrAction(LrAction.Type.Shift, 6) }, { Tuple.Create(0, '6'), new LrAction(LrAction.Type.Shift, 7) }, { Tuple.Create(0, '7'), new LrAction(LrAction.Type.Shift, 8) }, { Tuple.Create(0, '8'), new LrAction(LrAction.Type.Shift, 9) }, { Tuple.Create(0, '9'), new LrAction(LrAction.Type.Shift, 10) }, { Tuple.Create(1, Empty()), new LrAction(LrAction.Type.Accept) }, { Tuple.Create(2, '+'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(2, '-'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(2, '0'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(2, '1'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(2, '2'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(2, '3'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(2, '4'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(2, '5'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(2, '6'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(2, '7'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(2, '8'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(2, '9'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(2, Empty()), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(3, '+'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(3, '-'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(3, '0'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(3, '1'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(3, '2'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(3, '3'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(3, '4'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(3, '5'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(3, '6'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(3, '7'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(3, '8'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(3, '9'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(3, Empty()), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(4, '+'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(4, '-'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(4, '0'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(4, '1'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(4, '2'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(4, '3'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(4, '4'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(4, '5'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(4, '6'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(4, '7'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(4, '8'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(4, '9'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(4, Empty()), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(5, '+'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(5, '-'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(5, '0'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(5, '1'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(5, '2'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(5, '3'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(5, '4'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(5, '5'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(5, '6'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(5, '7'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(5, '8'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(5, '9'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(5, Empty()), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(6, '+'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(6, '-'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(6, '0'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(6, '1'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(6, '2'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(6, '3'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(6, '4'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(6, '5'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(6, '6'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(6, '7'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(6, '8'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(6, '9'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(6, Empty()), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(7, '+'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(7, '-'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(7, '0'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(7, '1'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(7, '2'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(7, '3'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(7, '4'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(7, '5'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(7, '6'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(7, '7'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(7, '8'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(7, '9'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(7, Empty()), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(8, '+'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(8, '-'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(8, '0'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(8, '1'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(8, '2'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(8, '3'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(8, '4'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(8, '5'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(8, '6'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(8, '7'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(8, '8'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(8, '9'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(8, Empty()), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(9, '+'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(9, '-'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(9, '0'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(9, '1'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(9, '2'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(9, '3'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(9, '4'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(9, '5'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(9, '6'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(9, '7'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(9, '8'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(9, '9'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(9, Empty()), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(10, '+'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(10, '-'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(10, '0'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(10, '1'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(10, '2'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(10, '3'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(10, '4'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(10, '5'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(10, '6'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(10, '7'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(10, '8'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(10, '9'), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(10, Empty()), new LrAction(LrAction.Type.Reduce, 1, "digit without zero") }, { Tuple.Create(11, '+'), new LrAction(LrAction.Type.Shift, 13) }, { Tuple.Create(11, '-'), new LrAction(LrAction.Type.Shift, 14) }, { Tuple.Create(11, Empty()), new LrAction(LrAction.Type.Reduce, 0, "{<binop>,<number>}") }, { Tuple.Create(12, '+'), new LrAction(LrAction.Type.Reduce, 0, "{<digit>}") }, { Tuple.Create(12, '-'), new LrAction(LrAction.Type.Reduce, 0, "{<digit>}") }, { Tuple.Create(12, '0'), new LrAction(LrAction.Type.Shift, 18) }, { Tuple.Create(12, '1'), new LrAction(LrAction.Type.Shift, 2) }, { Tuple.Create(12, '2'), new LrAction(LrAction.Type.Shift, 3) }, { Tuple.Create(12, '3'), new LrAction(LrAction.Type.Shift, 4) }, { Tuple.Create(12, '4'), new LrAction(LrAction.Type.Shift, 5) }, { Tuple.Create(12, '5'), new LrAction(LrAction.Type.Shift, 6) }, { Tuple.Create(12, '6'), new LrAction(LrAction.Type.Shift, 7) }, { Tuple.Create(12, '7'), new LrAction(LrAction.Type.Shift, 8) }, { Tuple.Create(12, '8'), new LrAction(LrAction.Type.Shift, 9) }, { Tuple.Create(12, '9'), new LrAction(LrAction.Type.Shift, 10) }, { Tuple.Create(12, Empty()), new LrAction(LrAction.Type.Reduce, 0, "{<digit>}") }, { Tuple.Create(13, '1'), new LrAction(LrAction.Type.Reduce, 1, "binop") }, { Tuple.Create(13, '2'), new LrAction(LrAction.Type.Reduce, 1, "binop") }, { Tuple.Create(13, '3'), new LrAction(LrAction.Type.Reduce, 1, "binop") }, { Tuple.Create(13, '4'), new LrAction(LrAction.Type.Reduce, 1, "binop") }, { Tuple.Create(13, '5'), new LrAction(LrAction.Type.Reduce, 1, "binop") }, { Tuple.Create(13, '6'), new LrAction(LrAction.Type.Reduce, 1, "binop") }, { Tuple.Create(13, '7'), new LrAction(LrAction.Type.Reduce, 1, "binop") }, { Tuple.Create(13, '8'), new LrAction(LrAction.Type.Reduce, 1, "binop") }, { Tuple.Create(13, '9'), new LrAction(LrAction.Type.Reduce, 1, "binop") }, { Tuple.Create(14, '1'), new LrAction(LrAction.Type.Reduce, 1, "binop") }, { Tuple.Create(14, '2'), new LrAction(LrAction.Type.Reduce, 1, "binop") }, { Tuple.Create(14, '3'), new LrAction(LrAction.Type.Reduce, 1, "binop") }, { Tuple.Create(14, '4'), new LrAction(LrAction.Type.Reduce, 1, "binop") }, { Tuple.Create(14, '5'), new LrAction(LrAction.Type.Reduce, 1, "binop") }, { Tuple.Create(14, '6'), new LrAction(LrAction.Type.Reduce, 1, "binop") }, { Tuple.Create(14, '7'), new LrAction(LrAction.Type.Reduce, 1, "binop") }, { Tuple.Create(14, '8'), new LrAction(LrAction.Type.Reduce, 1, "binop") }, { Tuple.Create(14, '9'), new LrAction(LrAction.Type.Reduce, 1, "binop") }, { Tuple.Create(15, Empty()), new LrAction(LrAction.Type.Reduce, 2, "expr") }, { Tuple.Create(16, '1'), new LrAction(LrAction.Type.Shift, 2) }, { Tuple.Create(16, '2'), new LrAction(LrAction.Type.Shift, 3) }, { Tuple.Create(16, '3'), new LrAction(LrAction.Type.Shift, 4) }, { Tuple.Create(16, '4'), new LrAction(LrAction.Type.Shift, 5) }, { Tuple.Create(16, '5'), new LrAction(LrAction.Type.Shift, 6) }, { Tuple.Create(16, '6'), new LrAction(LrAction.Type.Shift, 7) }, { Tuple.Create(16, '7'), new LrAction(LrAction.Type.Shift, 8) }, { Tuple.Create(16, '8'), new LrAction(LrAction.Type.Shift, 9) }, { Tuple.Create(16, '9'), new LrAction(LrAction.Type.Shift, 10) }, { Tuple.Create(17, '+'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(17, '-'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(17, '0'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(17, '1'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(17, '2'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(17, '3'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(17, '4'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(17, '5'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(17, '6'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(17, '7'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(17, '8'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(17, '9'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(17, Empty()), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(18, '+'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(18, '-'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(18, '0'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(18, '1'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(18, '2'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(18, '3'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(18, '4'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(18, '5'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(18, '6'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(18, '7'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(18, '8'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(18, '9'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(18, Empty()), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(19, '+'), new LrAction(LrAction.Type.Reduce, 2, "number") }, { Tuple.Create(19, '-'), new LrAction(LrAction.Type.Reduce, 2, "number") }, { Tuple.Create(19, Empty()), new LrAction(LrAction.Type.Reduce, 2, "number") }, { Tuple.Create(20, '+'), new LrAction(LrAction.Type.Reduce, 0, "{<digit>}") }, { Tuple.Create(20, '-'), new LrAction(LrAction.Type.Reduce, 0, "{<digit>}") }, { Tuple.Create(20, '0'), new LrAction(LrAction.Type.Shift, 18) }, { Tuple.Create(20, '1'), new LrAction(LrAction.Type.Shift, 2) }, { Tuple.Create(20, '2'), new LrAction(LrAction.Type.Shift, 3) }, { Tuple.Create(20, '3'), new LrAction(LrAction.Type.Shift, 4) }, { Tuple.Create(20, '4'), new LrAction(LrAction.Type.Shift, 5) }, { Tuple.Create(20, '5'), new LrAction(LrAction.Type.Shift, 6) }, { Tuple.Create(20, '6'), new LrAction(LrAction.Type.Shift, 7) }, { Tuple.Create(20, '7'), new LrAction(LrAction.Type.Shift, 8) }, { Tuple.Create(20, '8'), new LrAction(LrAction.Type.Shift, 9) }, { Tuple.Create(20, '9'), new LrAction(LrAction.Type.Shift, 10) }, { Tuple.Create(20, Empty()), new LrAction(LrAction.Type.Reduce, 0, "{<digit>}") }, { Tuple.Create(21, '+'), new LrAction(LrAction.Type.Shift, 13) }, { Tuple.Create(21, '-'), new LrAction(LrAction.Type.Shift, 14) }, { Tuple.Create(21, Empty()), new LrAction(LrAction.Type.Reduce, 0, "{<binop>,<number>}") }, { Tuple.Create(22, '+'), new LrAction(LrAction.Type.Reduce, 2, "{<digit>}") }, { Tuple.Create(22, '-'), new LrAction(LrAction.Type.Reduce, 2, "{<digit>}") }, { Tuple.Create(22, Empty()), new LrAction(LrAction.Type.Reduce, 2, "{<digit>}") }, { Tuple.Create(23, Empty()), new LrAction(LrAction.Type.Reduce, 3, "{<binop>,<number>}") }, }; gotos = new Dictionary <Tuple <int, string>, LrAction>() { { Tuple.Create(0, "digit without zero"), new LrAction(LrAction.Type.Goto, 12) }, { Tuple.Create(0, "expr"), new LrAction(LrAction.Type.Goto, 1) }, { Tuple.Create(0, "number"), new LrAction(LrAction.Type.Goto, 11) }, { Tuple.Create(11, "binop"), new LrAction(LrAction.Type.Goto, 16) }, { Tuple.Create(11, "{<binop>,<number>}"), new LrAction(LrAction.Type.Goto, 15) }, { Tuple.Create(12, "digit"), new LrAction(LrAction.Type.Goto, 20) }, { Tuple.Create(12, "digit without zero"), new LrAction(LrAction.Type.Goto, 17) }, { Tuple.Create(12, "{<digit>}"), new LrAction(LrAction.Type.Goto, 19) }, { Tuple.Create(16, "digit without zero"), new LrAction(LrAction.Type.Goto, 12) }, { Tuple.Create(16, "number"), new LrAction(LrAction.Type.Goto, 21) }, { Tuple.Create(20, "digit"), new LrAction(LrAction.Type.Goto, 20) }, { Tuple.Create(20, "digit without zero"), new LrAction(LrAction.Type.Goto, 17) }, { Tuple.Create(20, "{<digit>}"), new LrAction(LrAction.Type.Goto, 22) }, { Tuple.Create(21, "binop"), new LrAction(LrAction.Type.Goto, 16) }, { Tuple.Create(21, "{<binop>,<number>}"), new LrAction(LrAction.Type.Goto, 23) }, }; }
public LrTableImpl() { value = null; error = new LrAction(LrAction.Type.Error); actions = new Dictionary <Tuple <int, char>, LrAction>() { { Tuple.Create(0, '('), new LrAction(LrAction.Type.Shift, 14) }, { Tuple.Create(0, '0'), new LrAction(LrAction.Type.Shift, 2) }, { Tuple.Create(0, '1'), new LrAction(LrAction.Type.Shift, 3) }, { Tuple.Create(0, '2'), new LrAction(LrAction.Type.Shift, 4) }, { Tuple.Create(0, '3'), new LrAction(LrAction.Type.Shift, 5) }, { Tuple.Create(0, '4'), new LrAction(LrAction.Type.Shift, 6) }, { Tuple.Create(0, '5'), new LrAction(LrAction.Type.Shift, 7) }, { Tuple.Create(0, '6'), new LrAction(LrAction.Type.Shift, 8) }, { Tuple.Create(0, '7'), new LrAction(LrAction.Type.Shift, 9) }, { Tuple.Create(0, '8'), new LrAction(LrAction.Type.Shift, 10) }, { Tuple.Create(0, '9'), new LrAction(LrAction.Type.Shift, 11) }, { Tuple.Create(1, Empty()), new LrAction(LrAction.Type.Accept) }, { Tuple.Create(2, ')'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(2, '*'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(2, '+'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(2, Empty()), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(3, ')'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(3, '*'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(3, '+'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(3, Empty()), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(4, ')'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(4, '*'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(4, '+'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(4, Empty()), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(5, ')'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(5, '*'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(5, '+'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(5, Empty()), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(6, ')'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(6, '*'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(6, '+'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(6, Empty()), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(7, ')'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(7, '*'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(7, '+'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(7, Empty()), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(8, ')'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(8, '*'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(8, '+'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(8, Empty()), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(9, ')'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(9, '*'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(9, '+'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(9, Empty()), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(10, ')'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(10, '*'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(10, '+'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(10, Empty()), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(11, ')'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(11, '*'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(11, '+'), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(11, Empty()), new LrAction(LrAction.Type.Reduce, 1, "digit") }, { Tuple.Create(12, ')'), new LrAction(LrAction.Type.Reduce, 1, "expression") }, { Tuple.Create(12, '+'), new LrAction(LrAction.Type.Shift, 17) }, { Tuple.Create(12, Empty()), new LrAction(LrAction.Type.Reduce, 1, "expression") }, { Tuple.Create(13, ')'), new LrAction(LrAction.Type.Reduce, 1, "factor") }, { Tuple.Create(13, '*'), new LrAction(LrAction.Type.Reduce, 1, "factor") }, { Tuple.Create(13, '+'), new LrAction(LrAction.Type.Reduce, 1, "factor") }, { Tuple.Create(13, Empty()), new LrAction(LrAction.Type.Reduce, 1, "factor") }, { Tuple.Create(14, '('), new LrAction(LrAction.Type.Shift, 14) }, { Tuple.Create(14, '0'), new LrAction(LrAction.Type.Shift, 2) }, { Tuple.Create(14, '1'), new LrAction(LrAction.Type.Shift, 3) }, { Tuple.Create(14, '2'), new LrAction(LrAction.Type.Shift, 4) }, { Tuple.Create(14, '3'), new LrAction(LrAction.Type.Shift, 5) }, { Tuple.Create(14, '4'), new LrAction(LrAction.Type.Shift, 6) }, { Tuple.Create(14, '5'), new LrAction(LrAction.Type.Shift, 7) }, { Tuple.Create(14, '6'), new LrAction(LrAction.Type.Shift, 8) }, { Tuple.Create(14, '7'), new LrAction(LrAction.Type.Shift, 9) }, { Tuple.Create(14, '8'), new LrAction(LrAction.Type.Shift, 10) }, { Tuple.Create(14, '9'), new LrAction(LrAction.Type.Shift, 11) }, { Tuple.Create(15, Empty()), new LrAction(LrAction.Type.Reduce, 1, "statement") }, { Tuple.Create(16, ')'), new LrAction(LrAction.Type.Reduce, 1, "term") }, { Tuple.Create(16, '*'), new LrAction(LrAction.Type.Shift, 19) }, { Tuple.Create(16, '+'), new LrAction(LrAction.Type.Reduce, 1, "term") }, { Tuple.Create(16, Empty()), new LrAction(LrAction.Type.Reduce, 1, "term") }, { Tuple.Create(17, '('), new LrAction(LrAction.Type.Shift, 14) }, { Tuple.Create(17, '0'), new LrAction(LrAction.Type.Shift, 2) }, { Tuple.Create(17, '1'), new LrAction(LrAction.Type.Shift, 3) }, { Tuple.Create(17, '2'), new LrAction(LrAction.Type.Shift, 4) }, { Tuple.Create(17, '3'), new LrAction(LrAction.Type.Shift, 5) }, { Tuple.Create(17, '4'), new LrAction(LrAction.Type.Shift, 6) }, { Tuple.Create(17, '5'), new LrAction(LrAction.Type.Shift, 7) }, { Tuple.Create(17, '6'), new LrAction(LrAction.Type.Shift, 8) }, { Tuple.Create(17, '7'), new LrAction(LrAction.Type.Shift, 9) }, { Tuple.Create(17, '8'), new LrAction(LrAction.Type.Shift, 10) }, { Tuple.Create(17, '9'), new LrAction(LrAction.Type.Shift, 11) }, { Tuple.Create(18, ')'), new LrAction(LrAction.Type.Shift, 21) }, { Tuple.Create(19, '('), new LrAction(LrAction.Type.Shift, 14) }, { Tuple.Create(19, '0'), new LrAction(LrAction.Type.Shift, 2) }, { Tuple.Create(19, '1'), new LrAction(LrAction.Type.Shift, 3) }, { Tuple.Create(19, '2'), new LrAction(LrAction.Type.Shift, 4) }, { Tuple.Create(19, '3'), new LrAction(LrAction.Type.Shift, 5) }, { Tuple.Create(19, '4'), new LrAction(LrAction.Type.Shift, 6) }, { Tuple.Create(19, '5'), new LrAction(LrAction.Type.Shift, 7) }, { Tuple.Create(19, '6'), new LrAction(LrAction.Type.Shift, 8) }, { Tuple.Create(19, '7'), new LrAction(LrAction.Type.Shift, 9) }, { Tuple.Create(19, '8'), new LrAction(LrAction.Type.Shift, 10) }, { Tuple.Create(19, '9'), new LrAction(LrAction.Type.Shift, 11) }, { Tuple.Create(20, ')'), new LrAction(LrAction.Type.Reduce, 3, "expression") }, { Tuple.Create(20, Empty()), new LrAction(LrAction.Type.Reduce, 3, "expression") }, { Tuple.Create(21, ')'), new LrAction(LrAction.Type.Reduce, 3, "factor") }, { Tuple.Create(21, '*'), new LrAction(LrAction.Type.Reduce, 3, "factor") }, { Tuple.Create(21, '+'), new LrAction(LrAction.Type.Reduce, 3, "factor") }, { Tuple.Create(21, Empty()), new LrAction(LrAction.Type.Reduce, 3, "factor") }, { Tuple.Create(22, ')'), new LrAction(LrAction.Type.Reduce, 3, "term") }, { Tuple.Create(22, '+'), new LrAction(LrAction.Type.Reduce, 3, "term") }, { Tuple.Create(22, Empty()), new LrAction(LrAction.Type.Reduce, 3, "term") }, }; gotos = new Dictionary <Tuple <int, string>, LrAction>() { { Tuple.Create(0, "digit"), new LrAction(LrAction.Type.Goto, 13) }, { Tuple.Create(0, "expression"), new LrAction(LrAction.Type.Goto, 15) }, { Tuple.Create(0, "factor"), new LrAction(LrAction.Type.Goto, 16) }, { Tuple.Create(0, "statement"), new LrAction(LrAction.Type.Goto, 1) }, { Tuple.Create(0, "term"), new LrAction(LrAction.Type.Goto, 12) }, { Tuple.Create(14, "digit"), new LrAction(LrAction.Type.Goto, 13) }, { Tuple.Create(14, "expression"), new LrAction(LrAction.Type.Goto, 18) }, { Tuple.Create(14, "factor"), new LrAction(LrAction.Type.Goto, 16) }, { Tuple.Create(14, "term"), new LrAction(LrAction.Type.Goto, 12) }, { Tuple.Create(17, "digit"), new LrAction(LrAction.Type.Goto, 13) }, { Tuple.Create(17, "expression"), new LrAction(LrAction.Type.Goto, 20) }, { Tuple.Create(17, "factor"), new LrAction(LrAction.Type.Goto, 16) }, { Tuple.Create(17, "term"), new LrAction(LrAction.Type.Goto, 12) }, { Tuple.Create(19, "digit"), new LrAction(LrAction.Type.Goto, 13) }, { Tuple.Create(19, "factor"), new LrAction(LrAction.Type.Goto, 16) }, { Tuple.Create(19, "term"), new LrAction(LrAction.Type.Goto, 22) }, }; }