6.9.1.4.1. Constructor

6.9.1.4.1. Constructor

Start python section to interscript/parsers/lalr1.py[5]
    32: #line 159 "lalr1_parser.ipk"
    33:   def __init__(self, prods, start,verbosity=0):
    34:     self.verbosity = verbosity
    35:     self.start = start
    36:     self.productions = prods[:]
    37: 
    38:     if verbosity>1:
    39:       for i in range(len(self.productions)):
    40:         print i,':',self.productions[i]
    41: 
    42:     # calculate set of symbols, nonterminals, terminals
    43:     # and non-terminals directly deriving epsilon
    44:     self.symbols = set()
    45:     self.nonterms = set()
    46:     self.epslhs = set()
    47:     self.lhsprods = {}
    48:     for p in self.productions:
    49:       if not self.lhsprods.has_key(p.LHS): self.lhsprods[p.LHS]=set()
    50:       self.lhsprods[p.LHS].insert(p)
    51:       self.nonterms.insert(p.LHS)
    52:       if len(p.RHS)==1:
    53:         if p.RHS[0] is EPS: self.epslhs.insert(p.LHS)
    54:       elif len(p.RHS)==0: self.epslhs.insert(p.LHS)
    55: 
    56:       for sym in p.RHS:
    57:         if sym != EPS: self.symbols.insert(sym)
    58: 
    59:     self.terms = self.symbols - self.nonterms
    60: 
    61:     if verbosity>1:
    62:       print 'Symbols',self.symbols
    63:       print 'Terminals',self.terms
    64:       print 'NonTerminals',self.nonterms
    65:       print 'Directly Derive epsilon',self.epslhs
    66: 
    67:     self.calc_lhsdereps()
    68:     if verbosity>1:
    69:       print 'Derive epsilon',self.lhsdereps
    70: 
    71:     self.calc_firstmap()
    72:     if verbosity>1:
    73:       print 'First Sets:'
    74:       for nt in self.firstmap.keys():
    75:         print nt,'->',self.firstmap[nt]
    76: 
    77:     self.calc_followmap()
    78:     if verbosity>1:
    79:       print 'Follow Sets:'
    80:       for nt in self.followmap.keys():
    81:         print nt,'->',self.followmap[nt]
    82: 
    83: 
End python section to interscript/parsers/lalr1.py[5]