diff --git a/shared/python/lci.py b/shared/python/lci.py index 13a121a1..38f6e935 100755 --- a/shared/python/lci.py +++ b/shared/python/lci.py @@ -96,6 +96,7 @@ def ChainFromArray(a): # extension, correction, relaxation ttype = {} orderedsrc = [] +derived = {} shortcuts = {} actions = [] autoactions = {} @@ -144,7 +145,9 @@ def readConfiguration (cfg): testsets[xmlnode.findtext('name')]=expandxml(xmlnode.findall('command')[0],{}) # sources for xmlnode in config.findall('//source'): - orderedsrc.append(xmlnode.findtext('name')); + orderedsrc.append(xmlnode.findtext('name')) + if xmlnode.findall('derived'): + derived[xmlnode.findtext('name')]=(xmlnode.findtext('derived/from'),xmlnode.findtext('derived/using')) extractor[xmlnode.findtext('name')]=expandxml(xmlnode.findall('grammar/extraction')[0],{}) if xmlnode.findall('grammar/parsing'): parser[xmlnode.findtext('name')]=expandxml(xmlnode.findall('grammar/parsing')[0],{}) @@ -230,28 +233,32 @@ def expandxml(mixed,rep): def quote(a): return '"'+a+'"' -def addarc(fromnode,tonode,q,labelnode): - if [fromnode,tonode,q,labelnode] not in graphBig: - graphBig.append([fromnode,tonode,q,labelnode]) - def makeGraph(): # first we generate a complete picture for x in targets.keys(): for branch in targets[x]: graphSmall.append((branch[0],x)) if len(branch)==1: - graphBig.append((branch,Chain(x),'',x)) + graphBig.append((branch,Chain(x),'',x,'')) else: for i in range(1,len(branch)-1): - graphBig.append((branch[:i],branch[:(i+1)],stripSpecifics(branch[i]),x)) - graphBig.append((branch[:-1],Chain(x),stripSpecifics(branch[-1]),x)) + if branch[i] in autoactions.keys(): + gen = autoactions[branch[i]] + else: + gen = '' + graphBig.append((branch[:i],branch[:(i+1)],stripSpecifics(branch[i]),x,gen)) + if branch[-1] in autoactions.keys(): + gen = autoactions[branch[-1]] + else: + gen = '' + graphBig.append((branch[:-1],Chain(x),stripSpecifics(branch[-1]),x,gen)) def distanceBetween(node,tgt): if node()==tgt: return '?' if len(targets[tgt])!=2: print '[WARN] Only binary branches supported for now.' - return '?' + return '??' if targets[tgt][0]().find(node())==0: return compareGrammars(node,targets[tgt][1]) elif targets[tgt][1]().find(node())==0: @@ -347,6 +354,8 @@ def dumpGraph(df): par += 'label="'+arc[2]+'" ' if arc[1] in failed: par += 'color=red ' + if arc[4]: + par += 'taillabel="'+arc[4]+'" labelfontname="Times-Italic" style=bold ' if arc[1]() in targets.keys(): pseudo = arc[0][:] pseudo.append(arc[2]) @@ -380,7 +389,9 @@ def dumpGraph(df): cx = distanceBetween(node,goal) #print '[----]',node,'(->',goal,') =',cx,'['+tmp+']' dot.write(' [color='+colour) - if cx != '?': + if cx == '??': + dot.write(', label="?"') + elif cx != '?': dot.write(', label="'+cx+'"') #currentFile.write(node.lastAction()+','+`eval(cx)`+'\n') if node.dotNodeName(goal) in dablNodezz: @@ -390,7 +401,7 @@ def dumpGraph(df): #currentFile.close() dot.write('}') dot.close() - run = 'dot -Tpdf '+dot.name+' -o '+df+'_large.pdf' + run = 'dot -Tpdf '+dot.name+' -o '+df+'_large.pdf 2>/dev/null' writeLog(run) if os.system(run): print '[WARN] Detailed diagram not generated' @@ -403,6 +414,8 @@ def dumpGraph(df): dot.write(' [color=red]') elif x in almostFailed: dot.write(' [color=blue]') + if x in derived.keys(): + dot.write(' [shape=egg]') dot.write(';') for x in orderedsrc: dot.write(quote(x)) @@ -410,6 +423,9 @@ def dumpGraph(df): dot.write(';') else: dot.write('->') + # "xsd"->"jaxb" [style=solid,label="xjc",color=grey,labelfloat,fontname="Times-Italic"]; + for x in derived.keys(): + dot.write('"'+derived[x][0]+'"->"'+x+'" [style=solid,label="'+derived[x][1]+'",color=grey,labelfloat,fontname="Times-Italic"];') dot.write('}') dot.write('node [shape=octagon]\n') for x in targets.keys(): @@ -426,7 +442,7 @@ def dumpGraph(df): dot.write(';\n') dot.write('}') dot.close() - run = 'dot -Tpdf '+dot.name+' -o '+df+'_small.pdf' + run = 'dot -Tpdf '+dot.name+' -o '+df+'_small.pdf 2>/dev/null' writeLog(run) if os.system(run): print '[WARN] Abstract diagram not generated.' @@ -760,7 +776,7 @@ def checkConsistency(): sysexit(18) if __name__ == "__main__": - print 'Language Covergence Infrastructure v1.16' + print 'Language Covergence Infrastructure v1.17' if len(sys.argv) == 3: log = open(sys.argv[1].split('.')[0]+'.log','w') readConfiguration(sys.argv[1]) diff --git a/shared/python/xbgf_overview.py b/shared/python/xbgf_overview.py index a4730f04..4152a044 100755 --- a/shared/python/xbgf_overview.py +++ b/shared/python/xbgf_overview.py @@ -84,8 +84,8 @@ def report(keys,key,note): sorted.sort() if sorted == ['read12','read123','jls1','jls12','jls123','jls2','jls3']: sorted = ['jls1','jls2','jls3','jls12','jls123','read12','read123'] - elif sorted == ['abstract','concrete','java','limit','topdown']: - sorted = ['topdown','concrete','java','abstract','limit'] + elif sorted == ['abstract','concrete','java','limit','model','topdown']: + sorted = ['topdown','concrete','model','java','abstract','limit'] print '\\begin{tabular}{l|'+('c|'*len(targets))+'|c}' for x in sorted: print '&\\textbf{'+x+'}', diff --git a/shared/tools/lci b/shared/tools/lci index c2804caf..b7f8f44d 100755 --- a/shared/tools/lci +++ b/shared/tools/lci @@ -14,6 +14,5 @@ elif [ ! -r $1 ]; then echo "Oops: $1 not found or not readable." exit 1 else - sh ${SLPS}/shared/tools/checkxml lcf $1 python ${SLPS}/shared/python/lci.py $1 $2 fi diff --git a/shared/xsd/lcf.xsd b/shared/xsd/lcf.xsd index 0b107d69..10393ab8 100644 --- a/shared/xsd/lcf.xsd +++ b/shared/xsd/lcf.xsd @@ -98,7 +98,15 @@ - + + + + + + + + + @@ -164,11 +172,11 @@ - + - + diff --git a/topics/fl/lci/fl.lcf b/topics/fl/lci/fl.lcf index a1aff0aa..92ffc15a 100644 --- a/topics/fl/lci/fl.lcf +++ b/topics/fl/lci/fl.lcf @@ -154,7 +154,11 @@ - emf + ecore2 + + xsd + xsd2ecore + tools/ecore2bgf fl/emf2/model/fl.ecore @@ -196,6 +200,10 @@ jaxb + + xsd + xjc + tools/java2bgf fl/java3 fl @@ -264,7 +272,7 @@ - emf + ecore2 rename-emf diff --git a/topics/fl/lci/snapshot/architecture_large.pdf b/topics/fl/lci/snapshot/architecture_large.pdf index 8435c0d5..bc568782 100644 Binary files a/topics/fl/lci/snapshot/architecture_large.pdf and b/topics/fl/lci/snapshot/architecture_large.pdf differ diff --git a/topics/fl/lci/snapshot/architecture_small.pdf b/topics/fl/lci/snapshot/architecture_small.pdf index 0968728d..076ea4ce 100644 Binary files a/topics/fl/lci/snapshot/architecture_small.pdf and b/topics/fl/lci/snapshot/architecture_small.pdf differ