From 9d9e1a0a98333aa1a8f6e9035742ea39f95c5a19 Mon Sep 17 00:00:00 2001 From: Anders Nilsson <anders.nilsson@cs.lth.se> Date: Wed, 29 Nov 2006 13:47:16 +0100 Subject: [PATCH] Added small hand-written aspect Statistics.jrag to visualize how one can easily get information from the AST --- .bzrignore | 1 + CompilerGeneration.jrag | 46 +++++++++++++++++++++++++++-------------- siaras/Statistics.java | 13 ++++++++++++ siaras/Statistics.jrag | 22 ++++++++++++++++++++ 4 files changed, 66 insertions(+), 16 deletions(-) create mode 100644 siaras/Statistics.java create mode 100644 siaras/Statistics.jrag diff --git a/.bzrignore b/.bzrignore index 5ac1328..651c63f 100644 --- a/.bzrignore +++ b/.bzrignore @@ -9,3 +9,4 @@ siaras/Parser.java siaras/Siaras.ast siaras/PrettyPrinter.jrag siaras/Rewrites.jrag +siaras/log.tmp diff --git a/CompilerGeneration.jrag b/CompilerGeneration.jrag index 23cd2f5..839a5cf 100644 --- a/CompilerGeneration.jrag +++ b/CompilerGeneration.jrag @@ -62,7 +62,6 @@ aspect AbsGrammarGeneration { } void OwlRestriction.genAbsGrammar(PrintStream pStream) { -// pStream.print(getRestrictionPropertyId()); pStream.print(getRestrictionClassId().substring(0,1).toLowerCase()+ getRestrictionClassId().substring(1)); pStream.print(":"); @@ -159,22 +158,37 @@ aspect GenRewrites { pStream.println("}"); } -// public void OwlClassDecl.genRewrites(PrintStream pStream) { -// String ind = " "; -// int ix = 0; -// pStream.println(ind(1)+"rewrite ComplexElement {"); -// pStream.println(ind(2)+"when (getOwlIdentifier().getIDENTIFIER().equals(\""+ -// name()+"\") && !(this instanceof Thing))"); -// pStream.println(ind(3)+"to "+name()+" {"); + public void OwlClassDecl.genRewrites(PrintStream pStream) { + String ind = " "; + int ix = 0; + pStream.println(ind(1)+"rewrite ComplexElement {"); + pStream.println(ind(2)+"when (getOwlIdentifier().getIDENTIFIER().equals(\""+ + name()+"\") && !(this instanceof Thing))"); + pStream.println(ind(3)+"to "+name()+" {"); // pStream.println(ind(3)+"System.out.println(\"rewriting: \"+getOwlIdentifier().getIDENTIFIER());"); -// pStream.println(ind(3)+name()+" node = new "+name()+"();"); -// pStream.println(ind(3)+"node.setOwlIdentifier(getOwlIdentifier());"); -// pStream.println(ind(3)+"node.setAttributeList(getAttributeList());"); -// pStream.println(ind(3)+"node.setElementList(getElementList());"); -// pStream.println(ind(3)+"return node;"); -// pStream.println(ind(2)+"}"); -// pStream.println(ind(1)+"}"); -// } + pStream.println(ind(3)+name()+" node = new "+name()+"();"); + pStream.println(ind(3)+"node.setOwlIdentifier(getOwlIdentifier());"); + pStream.println(ind(3)+"node.setAttributeList(getAttributeList());"); + pStream.println(ind(3)+"node.setElementList(getElementList());"); + // Very temporary solution just so that DumpTree will not + // crasch from NullPointerException. Children should be filled + // in from rewrites instead + Restrictions restr = getRestrictions(); + for (int i=0; i<restr.getNumOwlRestriction(); i++) { + OwlRestriction r = restr.getOwlRestriction(i); + if (r.allValuesFrom()) { + pStream.println(ind(3)+"node.set"+r.name().substring(0,1).toLowerCase()+ + r.name().substring(1)+"List(new List());"); + } else { + pStream.println(ind(3)+r.name()+" c"+ix+" = new "+r.name()+"();"); + pStream.println(ind(3)+"node.set"+r.name().substring(0,1).toLowerCase()+ + r.name().substring(1)+"(c"+(ix++)+");"); + } + } + pStream.println(ind(3)+"return node;"); + pStream.println(ind(2)+"}"); + pStream.println(ind(1)+"}"); + } } diff --git a/siaras/Statistics.java b/siaras/Statistics.java new file mode 100644 index 0000000..ab028b7 --- /dev/null +++ b/siaras/Statistics.java @@ -0,0 +1,13 @@ + +import AST.Start; + +public class Statistics extends Parser { + public static void main(String args[]) { + Start ast = parse(args); + + // PrettyPrint all OWL instances found in input + ast.getManipulationDevices(System.out); + + + } +} diff --git a/siaras/Statistics.jrag b/siaras/Statistics.jrag new file mode 100644 index 0000000..1f6cc6e --- /dev/null +++ b/siaras/Statistics.jrag @@ -0,0 +1,22 @@ + +import java.io.PrintStream; + +aspect Statistics { + public void ASTNode.getManipulationDevices(PrintStream pStream) { + for (int i=0; i<getNumChild(); i++) { + getChild(i).getManipulationDevices(pStream); + } + } + + public void Thing.getManipulationDevices(PrintStream pStream) { + for (int i=0; i<getNumElement(); i++) { + getElement(i).getManipulationDevices(pStream); + } + } + + public void ManipulationAndHandling.getManipulationDevices(PrintStream pStream) { + pStream.println(getOwlIdentifier().getIDENTIFIER()+ + " : "+getAttribute(0).getValue().getSTRING_LITERAL()); + super.getManipulationDevices(pStream); + } +} -- GitLab