#!/usr/local/bin/python # -*- coding: utf-8 -*- import elementtree.ElementTree as ET import os, sys sys.path.append(os.getcwd().split('slps')[0] + 'slps/shared/python') import BGF if __name__ == "__main__": g = BGF.Grammar() g.addRoot('foo') p = BGF.Production() p.setNT('foo') t = BGF.Terminal() t.setName('bar') p.setExpr(BGF.Expression(t)) g.addProd(p) ET.ElementTree(g.getXml()).write('baby.bgf')
def addProductionsOf(r, cg, src, tgt): if r in processed: return for p in src.prods: if p.nt == r: tgt.addProd(p) processed.append(r) for n in cg[r]: addProductionsOf(n, cg, src, tgt) return if __name__ == "__main__": if len(sys.argv) < 4: print 'This tool extracts a portion of a grammar that starts at a given root nonterminal and includes all referenced nonterminals as well.' print 'Usage:' print ' subgrammar <bgf-input> <new-root> [<new-root>...] <bgf-output>' sys.exit(1) bgf = BGF.Grammar() newBgf = BGF.Grammar() bgf.parse(sys.argv[1]) roots = sys.argv[2:-1] print 'Setting root(s) to', roots for r in roots: newBgf.addRoot(r) cg = metrics.getCallGraph(bgf) for r in roots: addProductionsOf(r, cg, bgf, newBgf) ET.ElementTree(newBgf.getXml()).write(sys.argv[-1]) sys.exit(0)
#!/usr/local/bin/python # -*- coding: utf-8 -*- import os,sys sys.path.append(os.getcwd().split('slps')[0]+'slps/shared/python') import BGF import metrics if __name__ == "__main__": if len(sys.argv) != 2: print 'This tool calculates an MCC metric for any given BGF grammar.' print 'Usage:' print ' '+sys.argv[0]+' <bgf-input>' sys.exit(1) bgf = BGF.Grammar() bgf.parse(sys.argv[1]) print metrics.MCC(bgf) sys.exit(0)
#!/usr/bin/python import os, sys sys.path.append(os.getcwd().split('projects')[0] + 'projects/slps/shared/python') import BGF, bench if __name__ == "__main__": if len(sys.argv) != 2: print 'This tool presents an overview of a BGF file.' print 'Usage:' print ' checkbgf <bgf>' sys.exit(1) grammar = BGF.Grammar() grammar.parse(sys.argv[1]) mb = bench.MeasurementBench(grammar) print 'Productions: ', len(grammar.prods) print 'Top alternatives: ', mb.PROD() print 'Nonterminals defined:', mb.DEFD() pa = lambda a: reduce(lambda x, y: x + ', ' + str(y), a[1:], '(' + str(a[ 0])) + ')' if mb.UNDEF(): print '%20s:' % 'bottom', mb.UNDEF(), pa(mb.getBottoms()) else: print '%20s:' % 'bottom', mb.UNDEF() if mb.ROOT(): print '%20s:' % 'root', mb.ROOT(), pa(grammar.roots) else: print '%20s:' % 'root', mb.ROOT() if mb.DEAD(): print '%20s:' % 'dead top', mb.DEAD(), pa(mb.getDeadTops()) else: