Beispiel #1
0
		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:
Beispiel #2
0

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]
Beispiel #3
0
 def _getVarList(self):
     if not self.cache.varlist:
         self.cache.varlist = metrics.var(self.grammar)
     return self.cache.varlist
Beispiel #4
0
	def _getVarList(self):
		if not self.cache.varlist:
			self.cache.varlist = metrics.var(self.grammar)
		return self.cache.varlist