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