yparse.py (4479:61d3ed46e373) | yparse.py (6498:e21e9ab5fad0) |
---|---|
1# parser for Unix yacc-based grammars 2# 3# Author: David Beazley (dave@dabeaz.com) 4# Date : October 2, 2006 5 6import ylex 7tokens = ylex.tokens 8 --- 11 unchanged lines hidden (view full) --- 20 '''defsection : definitions SECTION 21 | SECTION''' 22 p.lexer.lastsection = 1 23 print "tokens = ", repr(tokenlist) 24 print 25 print "precedence = ", repr(preclist) 26 print 27 print "# -------------- RULES ----------------" | 1# parser for Unix yacc-based grammars 2# 3# Author: David Beazley (dave@dabeaz.com) 4# Date : October 2, 2006 5 6import ylex 7tokens = ylex.tokens 8 --- 11 unchanged lines hidden (view full) --- 20 '''defsection : definitions SECTION 21 | SECTION''' 22 p.lexer.lastsection = 1 23 print "tokens = ", repr(tokenlist) 24 print 25 print "precedence = ", repr(preclist) 26 print 27 print "# -------------- RULES ----------------" |
28 print | 28 print |
29 30def p_rulesection(p): 31 '''rulesection : rules SECTION''' 32 33 print "# -------------- RULES END ----------------" 34 print_code(p[2],0) 35 36def p_definitions(p): --- 36 unchanged lines hidden (view full) --- 73 | tokenid''' 74 if len(p) == 2: 75 p[0] = [p[1]] 76 else: 77 p[0] = p[1] 78 p[1].append(p[3]) 79 80def p_tokenid(p): | 29 30def p_rulesection(p): 31 '''rulesection : rules SECTION''' 32 33 print "# -------------- RULES END ----------------" 34 print_code(p[2],0) 35 36def p_definitions(p): --- 36 unchanged lines hidden (view full) --- 73 | tokenid''' 74 if len(p) == 2: 75 p[0] = [p[1]] 76 else: 77 p[0] = p[1] 78 p[1].append(p[3]) 79 80def p_tokenid(p): |
81 '''tokenid : ID | 81 '''tokenid : ID |
82 | ID NUMBER 83 | QLITERAL 84 | QLITERAL NUMBER''' 85 p[0] = p[1] | 82 | ID NUMBER 83 | QLITERAL 84 | QLITERAL NUMBER''' 85 p[0] = p[1] |
86 | 86 |
87def p_optsemi(p): 88 '''optsemi : ';' 89 | empty''' 90 91def p_optcomma(p): 92 '''optcomma : ',' 93 | empty''' 94 --- 65 unchanged lines hidden (view full) --- 160 p[0] = (p[1],p[4]) 161 162def p_rule_empty(p): 163 '''rule : ID ':' ';' ''' 164 p[0] = (p[1],[[]]) 165 166def p_rule_empty2(p): 167 '''rule : ID ':' morerules ';' ''' | 87def p_optsemi(p): 88 '''optsemi : ';' 89 | empty''' 90 91def p_optcomma(p): 92 '''optcomma : ',' 93 | empty''' 94 --- 65 unchanged lines hidden (view full) --- 160 p[0] = (p[1],p[4]) 161 162def p_rule_empty(p): 163 '''rule : ID ':' ';' ''' 164 p[0] = (p[1],[[]]) 165 166def p_rule_empty2(p): 167 '''rule : ID ':' morerules ';' ''' |
168 | 168 |
169 p[3].insert(0,[]) 170 p[0] = (p[1],p[3]) 171 172def p_morerules(p): 173 '''morerules : morerules '|' rulelist 174 | '|' rulelist 175 | '|' ''' | 169 p[3].insert(0,[]) 170 p[0] = (p[1],p[3]) 171 172def p_morerules(p): 173 '''morerules : morerules '|' rulelist 174 | '|' rulelist 175 | '|' ''' |
176 177 if len(p) == 2: | 176 177 if len(p) == 2: |
178 p[0] = [[]] | 178 p[0] = [[]] |
179 elif len(p) == 3: | 179 elif len(p) == 3: |
180 p[0] = [p[2]] 181 else: 182 p[0] = p[1] 183 p[0].append(p[3]) 184 185# print "morerules", len(p), p[0] 186 187def p_rulelist(p): --- 30 unchanged lines hidden --- | 180 p[0] = [p[2]] 181 else: 182 p[0] = p[1] 183 p[0].append(p[3]) 184 185# print "morerules", len(p), p[0] 186 187def p_rulelist(p): --- 30 unchanged lines hidden --- |