441: #line 610 "lalr1_parser.ipk"
442: def initLALR1items(self):
443: self.kernelitems = kernels = self.kernelsoflalr1items()
444: props = {}
445: la_table = []
446: for x in range(len(kernels)):
447: la_table.append([])
448: for y in range(len(kernels[x])):
449: la_table[x].append([])
450: la_table[0][0] = [EOF]
451: if self.verbosity>1:
452: print "initLALR1items, kernels done, calculating propagations and spontaneous lookaheads"
453: state_i = 0
454: for itemset in kernels:
455: if self.verbosity>1:
456: print ".",
457: sp, pr = self.lookaheads(itemset)
458: for ns, (pi, ri), t in sp:
459: inner = kernels[ns].index((pi, ri))
460: la_table[ns][inner].append(t)
461: props[state_i] = pr
462: state_i = state_i + 1
463: return la_table, props
464:
465:
466: def calc_LALR1items(self):
467: la_table, props = self.initLALR1items()
468: if self.verbosity>1:
469: print "done init LALR1items"
470: soi = self.kernelitems
471: while 1:
472: added_la = 0
473: state_i = 0
474: for state in la_table:
475: ii = 0
476: for propterms in state:
477: if not propterms:
478: ii = ii + 1
479: continue
480: item = soi[state_i][ii]
481: ii = ii + 1
482: try:
483: proplist = props[state_i][item]
484: except KeyError:
485: continue
486: for pstate, pitem in proplist:
487: inner = soi[pstate].index(pitem)
488: for pt in propterms:
489: if pt not in la_table[pstate][inner]:
490: added_la = 1
491: la_table[pstate][inner].append(pt)
492: state_i = state_i + 1
493: if not added_la:
494: break
495:
496:
497:
498:
499: if self.verbosity>1:
500: print "done with lalr1items, reorganizing the data"
501: res = []
502: state_i = 0
503: for state in soi:
504: item_i = 0
505: inner = []
506: for item in state:
507: for term in la_table[state_i][item_i]:
508: if (item, term) not in inner:
509: inner.append((item, term))
510: item_i = item_i + 1
511: inner.sort()
512: res.append(inner)
513: state_i = state_i + 1
514: self.LALRitems = res
515: