File tree 2 files changed +8
-6
lines changed
2 files changed +8
-6
lines changed Original file line number Diff line number Diff line change @@ -11,9 +11,7 @@ def __init__(self, grammar):
11
11
# For convenience during parsing
12
12
self .nonterminals = set ([rule .sym .char for rule in grammar .rules ])
13
13
14
- first_sets = parse_table .build_first_sets (grammar )
15
- follow_sets = parse_table .build_follow_sets (grammar , first_sets )
16
- self .parse_table = parse_table .build_parse_table (grammar , first_sets , follow_sets )
14
+ self .parse_table = parse_table .build_parse_table (grammar )
17
15
18
16
def parse (self , s ):
19
17
parse_stack = [END_SYMBOL , self .grammar .start_symbol .char ]
@@ -32,7 +30,7 @@ def parse(self, s):
32
30
i += 1
33
31
34
32
# predict attempt
35
- elif parse_stack [- 1 ] != s_list [ i ] and parse_stack [ - 1 ] in self .nonterminals :
33
+ elif parse_stack [- 1 ] in self .nonterminals :
36
34
X = parse_stack .pop ()
37
35
a = s_list [i ]
38
36
@@ -45,7 +43,7 @@ def parse(self, s):
45
43
46
44
parse_stack = parse_stack + [sym for sym in syms if sym is not EPSILON_CHAR ]
47
45
48
- # mismatch
46
+ # terminal mismatch
49
47
else :
50
48
return False
51
49
Original file line number Diff line number Diff line change 2
2
from pycc .grammar import NSym , TSym
3
3
from pycc .constants import EPSILON_CHAR , END_SYMBOL
4
4
5
- def build_parse_table (grammar , first_sets , follow_sets ):
5
+ def build_parse_table (grammar , first_sets = None , follow_sets = None ):
6
+ if first_sets is None or follow_sets is None :
7
+ first_sets = build_first_sets (grammar )
8
+ follow_sets = build_follow_sets (grammar , first_sets )
9
+
6
10
parse_table = {}
7
11
8
12
for rule in grammar .rules :
You can’t perform that action at this time.
0 commit comments