From 26a557f7dbd77cb2edadffd0f2309a856a6a7596 Mon Sep 17 00:00:00 2001 From: grammarware Date: Sat, 11 Oct 2008 19:58:30 +0000 Subject: [PATCH] more metrics git-svn-id: https://slps.svn.sourceforge.net/svnroot/slps@335 ab42f6e0-554d-0410-b580-99e487e6eeb2 --- shared/tools/bgfover | 11 +++ shared/tools/xbgflc | 8 +- shared/tools/xbgfover | 11 +++ topics/presentation/metrics/bgfover.py | 57 ++++++++++++++ topics/presentation/metrics/xbgfover.py | 100 ++++++++++++++++++++++++ 5 files changed, 183 insertions(+), 4 deletions(-) create mode 100755 shared/tools/bgfover create mode 100755 shared/tools/xbgfover create mode 100755 topics/presentation/metrics/bgfover.py create mode 100755 topics/presentation/metrics/xbgfover.py diff --git a/shared/tools/bgfover b/shared/tools/bgfover new file mode 100755 index 00000000..2ee53cdd --- /dev/null +++ b/shared/tools/bgfover @@ -0,0 +1,11 @@ +#!/bin/sh + +# Get our hands on basedir +LOCAL1=${PWD} +cd `dirname $0` +cd ../.. +SLPS=${PWD} +cd ${LOCAL1} + +python ${SLPS}/topics/presentation/metrics/bgfover.py $1 $2 $3 +rm -f TMP-res diff --git a/shared/tools/xbgflc b/shared/tools/xbgflc index a7e00684..583c38a8 100755 --- a/shared/tools/xbgflc +++ b/shared/tools/xbgflc @@ -15,12 +15,12 @@ elif [ ! -r $1 ]; then echo "Oops: $1 not found or not readable." exit 1 else - /bin/echo -n "Total lines: " - wc -l $1 - /bin/echo -n "Total transformations: " - xpath $1 `cat ${SLPS}/topics/presentation/metrics/transformations.xpath` 2> /dev/null + /bin/echo -n "Total lines: " + wc -l $1 | awk '{print $1}' /bin/echo -n "Total issues solved: " cat $1 | grep -c "<\!--" + /bin/echo -n "Total transformations: " + xpath $1 `cat ${SLPS}/topics/presentation/metrics/transformations.xpath` 2> /dev/null /bin/echo "XBGF commands statistics:" galax-run ${SLPS}/topics/presentation/metrics/perxbgfcommand.xq -serialize wf -doc xsd=${SLPS}/shared/xsd/xbgf.xsd -doc xbgf=$1 -language dxq | grep -v "glx:result" fi diff --git a/shared/tools/xbgfover b/shared/tools/xbgfover new file mode 100755 index 00000000..9ef5ac26 --- /dev/null +++ b/shared/tools/xbgfover @@ -0,0 +1,11 @@ +#!/bin/sh + +# Get our hands on basedir +LOCAL1=${PWD} +cd `dirname $0` +cd ../.. +SLPS=${PWD} +cd ${LOCAL1} + +python ${SLPS}/topics/presentation/metrics/xbgfover.py $1 $2 $3 + diff --git a/topics/presentation/metrics/bgfover.py b/topics/presentation/metrics/bgfover.py new file mode 100755 index 00000000..8a9a0dbd --- /dev/null +++ b/topics/presentation/metrics/bgfover.py @@ -0,0 +1,57 @@ +#!/usr/bin/python +import os +import sys +import elementtree.ElementTree as ET + +productions = "count(/*/*[local-name()='production'])" +nonterminals = "count(/*[local-name()='grammar']/*/nonterminal[not(text()=../preceding-sibling::*/nonterminal/text())])" +top = "count(/*/*/nonterminal[not(text()=/*/*/*//nonterminal/text()) and not(text()=../preceding-sibling::*/nonterminal/text())])" +bottom = "count(/*/*[not(*//nonterminal)]/nonterminal[not(text()=../preceding-sibling::*/nonterminal/text())])" + +names = [] + +bgfns = 'http://planet-sl.org/bgf' +ET._namespace_map[bgfns] = 'bgf' + +def runxpath(filename,xpathexpr): + os.system('xpath '+filename+' "'+xpathexpr+'" 1>TMP-res 2>/dev/null') + tmp = open('TMP-res','r') + res = tmp.readline().strip() + tmp.close() + return res + +def fillinline(path,xexpr): + s = '' + for x in names: + s += '&'+runxpath(path+x+'.bgf',xexpr) + return s+'\\\\' + +if __name__ == "__main__": + if len(sys.argv) != 3: + print 'This tool generates an overview of a bunch of BGF sources.' + print 'Usage:' + print ' xbgfover ' + sys.exit(1) + lcf = ET.parse(sys.argv[1]) + for x in lcf.findall('/source'): + name = x.findtext('name') + names.append(name) + srclen = len(names) + for x in lcf.findall('/target'): + name = x.findtext('name') + names.append(name) + path = sys.argv[2] + if path[-1]!='/': + path += '/' + print '\\begin{tabular}{l|'+('c|'*srclen)+'|'+('c|'*(len(names)-srclen))+'}' + for x in names: + print '&\\textbf{'+x+'}' + print '\\\\\\hline' + print 'Total productions: ',fillinline(path,productions) + print 'Total nonterminals: ',fillinline(path,nonterminals) + print 'Top nonterminals: ',fillinline(path,top) + print 'Bottom nonterminals:',fillinline(path,bottom) + print '\\hline' + print '\\end{tabular}' + sys.exit(0) + diff --git a/topics/presentation/metrics/xbgfover.py b/topics/presentation/metrics/xbgfover.py new file mode 100755 index 00000000..16ba5ef9 --- /dev/null +++ b/topics/presentation/metrics/xbgfover.py @@ -0,0 +1,100 @@ +#!/usr/bin/python +import os +import sys +import elementtree.ElementTree as ET + +names = [] +targets = {} +results = {} + +bgfns = 'http://planet-sl.org/bgf' +xbgfns= 'http://planet-sl.org/xbgf' +xsdns = 'http://www.w3.org/2001/XMLSchema' + +ET._namespace_map[bgfns] = 'bgf' +ET._namespace_map[xbgfns]='xbgf' +ET._namespace_map[xsdns] = 'xsd' + +def loc(filename): + f = open(filename,'r') + c = len(f.readlines()) + f.close() + return c-1 + +def noi(filename): + f = open(filename,'r') + c = ''.join(f.readlines()).count('