1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 '''
18 LR parser stuff
19 '''
20
22 """
23 Action table for LR parsing
24 """
25
28
29
30
31 - def add(self, state, token, args):
32 """
33 Add table entry
34 """
35
36 if state not in self._table:
37 self._table[state] = {}
38
39 self._table[state][token] = args
40
41
42
43 - def get(self, state, token):
44 """
45 Get action for state and token or raise KeyError
46 """
47
48 return self._table[state][token]
49
50
51
53 """
54 Goto table
55 """
56
59
60
61
62 - def add(self, state, ntoken, newstate):
63 """
64 Add table entry
65 """
66
67 if state not in self._table:
68 self._table[state] = {}
69
70 self._table[state][ntoken] = newstate
71
72
73
74 - def get(self, state, ntoken):
75 return self._table[state][ntoken]
76
77
78
80 """
81 Parsing rules
82 """
83
86
87
88
89 - def add(self, ruleno, ntoken, size):
90 """
91 Add rule
92
93 @param ruleno: Rule number, used by REDUCE action
94 @param ntoken: Left side non-terminal of the rule
95 @param size: RHS size
96 """
97
98 self._rules[ruleno] = (ntoken, size)
99
100
101
102 - def get(self, ruleno):
103 """
104 Return tuple: ntoken, size or raise KeyError
105 """
106
107 return self._rules[ruleno]
108
109
110
112 """
113 Tree class
114 """
115
118
119
120
121 - def add(self, obj):
123