From 07e3cdab08770755ca67f862d370e9a3b7992548 Mon Sep 17 00:00:00 2001
From: Anders Nilsson <anders.nilsson@control.lth.se>
Date: Fri, 21 Jan 2011 16:39:29 +0100
Subject: [PATCH] Modifying compiler generation to support new OWL format.

---
 CompilerGeneration.jrag |  8 ++++++++
 GenCompiler.java        |  1 +
 JavaCCChunks.jrag       |  6 +++---
 Misc.jrag               | 12 ++++++++++++
 Names.jrag              | 15 ++++++++++++---
 Rewrites.jrag           | 14 ++++++++++++++
 6 files changed, 50 insertions(+), 6 deletions(-)

diff --git a/CompilerGeneration.jrag b/CompilerGeneration.jrag
index 2ade2e8..c277c98 100644
--- a/CompilerGeneration.jrag
+++ b/CompilerGeneration.jrag
@@ -91,6 +91,14 @@ aspect AbsGrammarGeneration {
 // 		}
     }
 
+	void ClassDeclaration.genAbsGrammar(PrintStream pStream) {
+		pStream.print(name());
+		pStream.print(" : "+getSuperClass().name());	
+		pStream.print(" ::=");
+		getProperties().genAbsGrammar(pStream);
+		pStream.println(";");
+	}
+
 	void Properties.genAbsGrammar(PrintStream pStream) {
 		for (int i=0; i<getNumProperty(); i++) {
 			pStream.print(" ");
diff --git a/GenCompiler.java b/GenCompiler.java
index 0a53d87..589a5d3 100644
--- a/GenCompiler.java
+++ b/GenCompiler.java
@@ -43,6 +43,7 @@ public class GenCompiler extends Parser {
 		}
 
 		Start ast = parse(owlFile);
+		ast.setGrammarName(name);
 
 		File siarasDir = new File(dirName);
 		if (!siarasDir.isDirectory()) {
diff --git a/JavaCCChunks.jrag b/JavaCCChunks.jrag
index 7e5c256..7a8c942 100644
--- a/JavaCCChunks.jrag
+++ b/JavaCCChunks.jrag
@@ -31,11 +31,11 @@ aspect JavaCCChunks {
 		pStream.println("    STATIC                      = false;");
 		pStream.println("} ");
 		pStream.println();
-		pStream.println("PARSER_BEGIN("+name()+"Parser)");
+		pStream.println("PARSER_BEGIN("+grammarName()+"Parser)");
 		pStream.println("    package AST;");
-		pStream.println("    public class "+name()+"Parser {");
+		pStream.println("    public class "+grammarName()+"Parser {");
 		pStream.println("}");
-		pStream.println("PARSER_END("+name()+"Parser)");
+		pStream.println("PARSER_END("+grammarName()+"Parser)");
 		pStream.println();
 		pStream.println("//----------------------------------------------//");
 		pStream.println("//                LEXICAL TOKENS                //");
diff --git a/Misc.jrag b/Misc.jrag
index d4775d6..99bb395 100644
--- a/Misc.jrag
+++ b/Misc.jrag
@@ -31,4 +31,16 @@ aspect Misc {
 		}
 		return s.toString();
 	}
+
+
+	syn Attribute Element.iri() = null;
+	eq ComplexElement.iri() {
+		for (int i=0; i<getNumAttribute(); i++) {
+			Attribute a = getAttribute(i);
+			if (a instanceof IRI) {
+				return a;
+			}
+		}
+		return null;
+	}
 }
diff --git a/Names.jrag b/Names.jrag
index ec7fcc8..100864c 100644
--- a/Names.jrag
+++ b/Names.jrag
@@ -20,7 +20,16 @@
  */
 
 aspect Names {
-	syn String OClass.name() = getId();
-	syn String OwlProperty.name() = getId();
-	syn String OwlRestriction.name() = getRestrictionClassId();
+	syn String Element.name() = "";
+	eq OClass.name() = getId();
+	eq OwlProperty.name() = getId();
+	eq OwlRestriction.name() = getRestrictionClassId();
+	eq Declaration.name() = getElement(0).name();
+	eq Clazz.name() = iri().name();
+	eq NamedIndividual.name() = iri().trim();
+
+
+	static String ASTNode.gName = "owl";
+	public void ASTNode.setGrammarName(String s) {gName = s;}
+	public String ASTNode.grammarName() {return gName;}
 }
diff --git a/Rewrites.jrag b/Rewrites.jrag
index c62fc43..48169f5 100644
--- a/Rewrites.jrag
+++ b/Rewrites.jrag
@@ -224,6 +224,20 @@ aspect MiscUtilities {
 		}
 		return (ComplexElement) e;
     }
+
+	syn boolean Declaration.isClassDecl() = getElement(0).isClass();
+	eq ClassDeclaration.isClassDecl() = true;
+	eq IndividualDeclaration.isClassDecl() = false;
+	syn boolean Declaration.isIndividualDecl() = getElement(0).isIndividual();
+	eq IndividualDeclaration.isIndividualDecl() = true;
+	eq ClassDeclaration.isIndividualDecl() = false;
+
+	syn boolean Element.isClass() = false;
+	eq Clazz.isClass() = true;
+
+	syn boolean Element.isIndividual() = false;
+	eq NamedIndividual.isIndividual() = true;
+
 }
 
 aspect RewriteClasses {
-- 
GitLab