return ps[0].expr.wrapped.data print '--->', ps[0].expr.wrapped.__class__.__name__ return None if __name__ == "__main__": if len(sys.argv) != 3: print 'This generator proposes to remove all chain productions and inline all once-used nonterminal symbols.' print 'Usage:' print ' '+sys.argv[0]+' <bgf-input> <xbgf-output>' sys.exit(1) bgf = BGF.Grammar() bgf.parse(sys.argv[1]) xbgf = open(sys.argv[2],'w') xbgf.write('<?xml version="1.0" encoding="UTF-8"?><xbgf:sequence xmlns:xbgf="http://planet-sl.org/xbgf" xmlns:bgf="http://planet-sl.org/bgf">\n') chains = {} nts = metrics.var(bgf) for n in nts: ps = bgf.getProdsOfN(n) if len(ps) == 1 and ps[0].expr.wrapped.__class__.__name__ == 'Nonterminal': chains[ps[0].expr.wrapped.data] = n refers1 = {} refers2 = {} for p in bgf.prods: for n in p.expr.wrapped.getXml().findall('.//nonterminal'): if n.text not in refers1.keys(): refers1[n.text] = [p.nt] else: refers1[n.text].append(p.nt) if p.nt not in refers2.keys(): refers2[p.nt] = [n.text] else:
if __name__ == "__main__": if len(sys.argv) != 3: print 'This generator proposes to remove all chain productions and inline all once-used nonterminal symbols.' print 'Usage:' print ' ' + sys.argv[0] + ' <bgf-input> <xbgf-output>' sys.exit(1) bgf = BGF.Grammar() bgf.parse(sys.argv[1]) xbgf = open(sys.argv[2], 'w') xbgf.write( '<?xml version="1.0" encoding="UTF-8"?><xbgf:sequence xmlns:xbgf="http://planet-sl.org/xbgf" xmlns:bgf="http://planet-sl.org/bgf">\n' ) chains = {} nts = metrics.var(bgf) for n in nts: ps = bgf.getProdsOfN(n) if len(ps) == 1 and ps[ 0].expr.wrapped.__class__.__name__ == 'Nonterminal': chains[ps[0].expr.wrapped.data] = n refers1 = {} refers2 = {} for p in bgf.prods: for n in p.expr.wrapped.getXml().findall('.//nonterminal'): if n.text not in refers1.keys(): refers1[n.text] = [p.nt] else: refers1[n.text].append(p.nt) if p.nt not in refers2.keys(): refers2[p.nt] = [n.text]
def _getVarList(self): if not self.cache.varlist: self.cache.varlist = metrics.var(self.grammar) return self.cache.varlist