Skip to content

Commit

Permalink
more metrics
Browse files Browse the repository at this point in the history
git-svn-id: https://slps.svn.sourceforge.net/svnroot/slps@335 ab42f6e0-554d-0410-b580-99e487e6eeb2
  • Loading branch information
grammarware committed Oct 11, 2008
1 parent 9ae55d1 commit 26a557f
Show file tree
Hide file tree
Showing 5 changed files with 183 additions and 4 deletions.
11 changes: 11 additions & 0 deletions 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
8 changes: 4 additions & 4 deletions shared/tools/xbgflc
Expand Up @@ -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
11 changes: 11 additions & 0 deletions 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

57 changes: 57 additions & 0 deletions 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 <lcf> <bgfs-path>'
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)

100 changes: 100 additions & 0 deletions 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('<!--')
f.close()
return c

def report(key,note):
print note+':',
for x in targets.keys():
if results[key][x]:
print '&',results[key][x],
else:
print '& ---',
print '\\\\'

if __name__ == "__main__":
if len(sys.argv) != 4:
print 'This tool generates an overview of a bunch of XBGF scripts.'
print 'Usage:'
print ' xbgfover <xbgf.xsd> <lcf> <xbgfs-path>'
sys.exit(1)
xsd = ET.parse(sys.argv[1])
for x in xsd.findall('/*'):
if x.attrib.has_key('name'):
names.append(x.attrib['name'])
lcf = ET.parse(sys.argv[2])
for x in lcf.findall('/target'):
name = x.findtext('name')
targets[name] = []
for y in x.findall('branch/perform'):
targets[name].append(y.text)
path = sys.argv[3]
if path[-1] != '/':
path += '/'
results['LOC'] = {}
results['NOI'] = {}
results['NOX'] = {}
for x in names:
results[x] = {}
for y in targets.keys():
results[x][y] = 0
for x in targets.keys():
results['LOC'][x] = 0
results['NOI'][x] = 0
results['NOX'][x] = 0
for y in targets[x]:
results['LOC'][x] += loc(path+y+'.xbgf')
results['NOI'][x] += noi(path+y+'.xbgf')
xbgf = ET.parse(path+y+'.xbgf')
results['NOX'][x] += len(xbgf.findall('/*'))
for z in names:
results[z][x] += len(xbgf.findall('/{'+xbgfns+'}'+z))
for x in names[:]:
used = False
for y in targets.keys():
if results[x][y]:
used = True
if not used:
print '%%',x,'not used in any XBGF script'
names.remove(x)
print '\\begin{tabular}{l|'+('c|'*len(targets))+'}'
for x in targets.keys():
print '&\\textbf{'+x+'}',
print '\\\\\\hline'
report('LOC','Number of lines')
print 'Number of steps:',
for x in targets.keys():
print '&',len(targets[x]),
print '\\\\'
report('NOI','Issues solved')
report('NOX','Transformations total')
for x in names:
report(x,'Uses of \\emph{'+x+'}')
print '\\hline'
print '\\end{tabular}'
sys.exit(0)

0 comments on commit 26a557f

Please sign in to comment.