From adaf1ffb348b9cbedb30a64b9471fc216ba5efd0 Mon Sep 17 00:00:00 2001
From: Anders Nilsson <andersn@fiol>
Date: Sun, 24 Sep 2006 21:28:05 +0200
Subject: [PATCH] Can now generate abstract grammar for the small ontology.
 Must fix the duplicated hasSkill attribute in the Device class though.

---
 CompilerGeneration.jrag |  83 +++++------
 Rewrites.jrag           | 316 ++++++++++++++++++++++++----------------
 owl.ast                 |  11 +-
 3 files changed, 236 insertions(+), 174 deletions(-)

diff --git a/CompilerGeneration.jrag b/CompilerGeneration.jrag
index 561936a..2b6c253 100644
--- a/CompilerGeneration.jrag
+++ b/CompilerGeneration.jrag
@@ -4,63 +4,64 @@ import java.io.*;
 
 aspect AbsGrammarGeneration {
     void ASTNode.genAbsGrammar(PrintStream pStream) {
-	for (int i=0; i<getNumChild(); i++) {
-	    getChild(i).genAbsGrammar(pStream);
-	}
+		for (int i=0; i<getNumChild(); i++) {
+			getChild(i).genAbsGrammar(pStream);
+		}
     }
 
     public void Start.genAbsGrammar(PrintStream pStream) {
-	super.genAbsGrammar(pStream);
+		super.genAbsGrammar(pStream);
     }
 
     void OwlClassDecl.genAbsGrammar(PrintStream pStream) {
-	pStream.print(getId());
-	pStream.print(" : "+getSuperClass().getId());	
-	pStream.print(" ::=");
-	Restrictions restrs = getRestrictions();
-	for (int i=0; i<restrs.getNumOwlRestriction(); i++) {
-	  pStream.print(" ");
-	  restrs.getOwlRestriction(i).genAbsGrammar(pStream);
-	}
-	pStream.println(";");
+		pStream.print(getId());
+		pStream.print(" : "+getSuperClass().getId());	
+		pStream.print(" ::=");
+		Restrictions restrs = getRestrictions();
+		for (int i=0; i<restrs.getNumOwlRestriction(); i++) {
+			pStream.print(" ");
+			restrs.getOwlRestriction(i).genAbsGrammar(pStream);
+		}
+		pStream.println(";");
     }
 
     void OwlRestriction.genAbsGrammar(PrintStream pStream) {
-	pStream.print(getRestrictionProperty().getId());
-	pStream.print(":");
-	pStream.print(getRestrictionClass().getId());
-	if (allValuesFrom()) {
-	    pStream.print("*");
-	}
+		pStream.print(getRestrictionPropertyId());
+		pStream.print(":");
+		pStream.print(getRestrictionClassId());
+		if (allValuesFrom()) {
+			pStream.print("*");
+		}
     }
 
-    OwlProperty OwlRestriction.getRestrictionProperty() {
-	for (int i=0; i<getNumElement(); i++) {
-	    Element e = getElement(i);
-	    if (e instanceof OwlOnProperty) {
-		return (OwlProperty) ((ComplexElement) e).getElement(0); // Ugly as hell!!
-	    }
-	}
-	return new OwlProperty();
+    String OwlRestriction.getRestrictionPropertyId() {
+		for (int i=0; i<getNumElement(); i++) {
+			ComplexElement e = (ComplexElement) getElement(i);
+			if (e instanceof OwlOnProperty) {
+				return e.getId(); 
+			}
+		}
+		return "_Unknown_";
     } 
 
-    OwlClassUse OwlRestriction.getRestrictionClass() {
-	for (int i=0; i<getNumElement(); i++) {
-	    Element e = getElement(i);
-	    if (e instanceof OwlAllValuesFrom || e instanceof OwlSomeValuesFrom) {
-		return (OwlClassUse) ((ComplexElement) e).getElement(0); // Ugly as hell!!
-	    }
-	}
-	return new OwlClassUse();
+    String OwlRestriction.getRestrictionClassId() {
+		for (int i=0; i<getNumElement(); i++) {
+			ComplexElement e = (ComplexElement) getElement(i);
+			if (e instanceof OwlAllValuesFrom || 
+				e instanceof OwlSomeValuesFrom) {
+				return e.getId(); // Ugly as hell!!
+			}
+		}
+		return "_Unknown_";
     } 
 
     syn lazy boolean OwlRestriction.allValuesFrom() {
-	for (int i=0; i<getNumElement(); i++) {
-	    if (getElement(i) instanceof OwlAllValuesFrom) {
-		return true;
-	    }
-	}
-	return false;
+		for (int i=0; i<getNumElement(); i++) {
+			if (getElement(i) instanceof OwlAllValuesFrom) {
+				return true;
+			}
+		}
+		return false;
     }
 
 }
diff --git a/Rewrites.jrag b/Rewrites.jrag
index b852f6d..74f4486 100644
--- a/Rewrites.jrag
+++ b/Rewrites.jrag
@@ -2,184 +2,242 @@
 
 aspect MiscUtilities {
     boolean Element.isTopLevel() {
-	if ( getParent() != null ) {
-	    return getParent().getParent() instanceof RdfDeclaration;
-	} else {
-	    return  false;
-	}
+		if ( getParent() != null ) {
+			return getParent().getParent() instanceof RdfDeclaration;
+		} else {
+			return  false;
+		}
     }
 
     syn lazy String Attribute.trim() {
-	String s = getValue().getSTRING_LITERAL();
-	if (s.indexOf('"') == 0) {
-	    s = s.substring(1,s.length()-1).trim();
-	} 
-	if (s.indexOf('#') > -1) {
-	    s = s.substring(s.indexOf('#')+1,s.length()).trim();
-	} 
- 	return s.trim();
+		String s = getValue().getSTRING_LITERAL();
+		if (s.indexOf('"') == 0) {
+			s = s.substring(1,s.length()-1).trim();
+		} 
+		if (s.indexOf('#') > -1) {
+			s = s.substring(s.indexOf('#')+1,s.length()).trim();
+		} 
+		return s.trim();
     }
 
     eq RdfResource.trim() {
-	String s = getValue().getSTRING_LITERAL();
-	if (s.indexOf('"') == 0) {
-	    s = s.substring(1,s.length()-1).trim();
-	} 
-	if (s.indexOf('#') > -1) {
-	    s = s.substring(s.indexOf('#')+1,s.length()).trim();
-	} 
-	if (s.equals("string")) {
-	    s = "String";
-	}
-	return s.trim();
+		String s = getValue().getSTRING_LITERAL();
+		if (s.indexOf('"') == 0) {
+			s = s.substring(1,s.length()-1).trim();
+		} 
+		if (s.indexOf('#') > -1) {
+			s = s.substring(s.indexOf('#')+1,s.length()).trim();
+		} 
+		if (s.equals("string")) {
+			s = "String";
+		}
+		return s.trim();
     }
 
     boolean ComplexElement.hasRdfId() {
-	for (int i=0; i<getNumAttribute(); i++) {
-	    if (getAttribute(i) instanceof RdfId) {
-		return true;
-	    }
-	}
-	return false;
+		for (int i=0; i<getNumAttribute(); i++) {
+			if (getAttribute(i) instanceof RdfId) {
+				return true;
+			}
+		}
+		return false;
     }
 
     boolean ComplexElement.hasRdfAbout() {
-	for (int i=0; i<getNumAttribute(); i++) {
-	    if (getAttribute(i) instanceof RdfAbout) {
-		return true;
-	    }
-	}
-	return false;
+		for (int i=0; i<getNumAttribute(); i++) {
+			if (getAttribute(i) instanceof RdfAbout) {
+				return true;
+			}
+		}
+		return false;
     }
 
     boolean ComplexElement.hasRdfResource() {
-	for (int i=0; i<getNumAttribute(); i++) {
-	    if (getAttribute(i) instanceof RdfResource) {
-		return true;
-	    }
-	}
-	return false;
+		for (int i=0; i<getNumAttribute(); i++) {
+			if (getAttribute(i) instanceof RdfResource) {
+				return true;
+			}
+		}
+		return false;
     }
 
     syn lazy String Element.getId() {
-	return new String("Element has no ID");
+		return new String("Element has no ID");
     }
 
     eq ComplexElement.getId() {
-	if (hasRdfId()) {
-	    for (int i=0; i<getNumAttribute(); i++) {
-		if (getAttribute(i) instanceof RdfId) {
-		    return getAttribute(i).trim();
-		}
-	    }
-	} else if (hasRdfAbout()) {
-	    for (int i=0; i<getNumAttribute(); i++) {
-		if (getAttribute(i) instanceof RdfAbout) {
-		    return getAttribute(i).trim();
-		}
-	    }
-	} else if (hasRdfResource()) {
-	    for (int i=0; i<getNumAttribute(); i++) {
-		if (getAttribute(i) instanceof RdfResource) {
-		    return getAttribute(i).trim();
-		}
-	    }
+		if (hasRdfId()) {
+			for (int i=0; i<getNumAttribute(); i++) {
+				if (getAttribute(i) instanceof RdfId) {
+					return getAttribute(i).trim();
+				}
+			}
+		} else if (hasRdfAbout()) {
+			for (int i=0; i<getNumAttribute(); i++) {
+				if (getAttribute(i) instanceof RdfAbout) {
+					return getAttribute(i).trim();
+				}
+			}
+		} else if (hasRdfResource()) {
+			for (int i=0; i<getNumAttribute(); i++) {
+				if (getAttribute(i) instanceof RdfResource) {
+					return getAttribute(i).trim();
+				}
+			}
+		}
+		// Fall through. Could not find Id, so let's return something
+		// well known
+		return "_Unknown_";
+    }
+
+	eq OwlValuesFrom.getId() {
+		if (hasRdfAbout()) {
+			for (int i=0; i<getNumAttribute(); i++) {
+				if (getAttribute(i) instanceof RdfAbout) {
+					return getAttribute(i).trim();
+				}
+			}
+		} else if (hasRdfResource()) {
+			for (int i=0; i<getNumAttribute(); i++) {
+				if (getAttribute(i) instanceof RdfResource) {
+					return getAttribute(i).trim();
+				}
+			}
+		} else {
+			for (int i=0; i<getNumElement(); i++) {
+				ComplexElement e = (ComplexElement) getElement(i);
+				if (e instanceof OClass) {
+					return e.getId();
+				}
+			}
+		}
+		// Fall through. Could not find Id, so let's return something
+		// well known
+		return "_Unknown_";		
+	}
+
+	eq OwlProperty.getId() {
+		if (hasRdfId()) {
+			for (int i=0; i<getNumAttribute(); i++) {
+				if (getAttribute(i) instanceof RdfId) {
+					return getAttribute(i).trim();
+				}
+			}
+		} else if (hasRdfAbout()) {
+			for (int i=0; i<getNumAttribute(); i++) {
+				if (getAttribute(i) instanceof RdfAbout) {
+					return getAttribute(i).trim();
+				}
+			}
+		} else if (hasRdfResource()) {
+			for (int i=0; i<getNumAttribute(); i++) {
+				if (getAttribute(i) instanceof RdfResource) {
+					return getAttribute(i).trim();
+				}
+			}
+		} else {
+			for (int i=0; i<getNumElement(); i++) {
+				ComplexElement e = (ComplexElement) getElement(i);
+				if (e instanceof OwlProperty) {
+					return e.getId();
+				}
+			}
+		}
+		// Fall through. Could not find Id, so let's return something
+		// well known
+		return "_Unknown_";		
 	}
-	// Fall through. Could not find Id, so let's return something
-	// well known
-	return "_Unknown_";
-    }
 
     syn lazy String Element.type() = null;
 
     eq RdfsRange.type() {
-	if (hasRdfResource()) {
-	    for (int i=0; i<getNumAttribute(); i++) {
-		if (getAttribute(i) instanceof RdfResource) {
-		    return getAttribute(i).trim();
+		if (hasRdfResource()) {
+			for (int i=0; i<getNumAttribute(); i++) {
+				if (getAttribute(i) instanceof RdfResource) {
+					return getAttribute(i).trim();
+				}
+			}
 		}
-	    }
-	}
-	for (int i=0; i<getNumElement(); i++) {
-	    String s = getElement(i).type();
-	    if (s != null) {
-		return s;
-	    }
-	}
-	// Fall through. Could not find Id, so let's return something
-	// well known
-	return "_Unknown_";
+		for (int i=0; i<getNumElement(); i++) {
+			String s = getElement(i).type();
+			if (s != null) {
+				return s;
+			}
+		}
+		// Fall through. Could not find Id, so let's return something
+		// well known
+		return "_Unknown_";
     }
 
     eq OwlDataRange.type() {
-	for (int i=0; i<getNumElement(); i++) {
-	    String s = getElement(i).type();
-	    if (s != null) {
-		return s;
-	    }
-	}	
-	return null;
+		for (int i=0; i<getNumElement(); i++) {
+			String s = getElement(i).type();
+			if (s != null) {
+				return s;
+			}
+		}	
+		return null;
     }
 
     eq OwlOneOf.type() {
-	for (int i=0; i<getNumElement(); i++) {
-	    String s = getElement(i).type();
-	    if (s != null) {
-		return s;
-	    }
-	}	
-	return null;
+		for (int i=0; i<getNumElement(); i++) {
+			String s = getElement(i).type();
+			if (s != null) {
+				return s;
+			}
+		}	
+		return null;
     }
 
     eq RdfFirst.type() {
-	for (int i=0; i<getNumAttribute(); i++) {
-	    if (getAttribute(i) instanceof RdfDatatype) {
-		return getAttribute(i).trim();
-	    }
-	}
-	return null;
+		for (int i=0; i<getNumAttribute(); i++) {
+			if (getAttribute(i) instanceof RdfDatatype) {
+				return getAttribute(i).trim();
+			}
+		}
+		return null;
     }
 
     ComplexElement ComplexElement.getTopElement() {
-	ASTNode e = this;
-	while (e != null && !(e instanceof RdfDeclaration)) {
-	    e = e.getParent();
-	}
-	return (ComplexElement) e;
+		ASTNode e = this;
+		while (e != null && !(e instanceof RdfDeclaration)) {
+			e = e.getParent();
+		}
+		return (ComplexElement) e;
     }
 }
 
 aspect RewriteClasses {
     rewrite OwlClass {
-	when (isTopLevel())
-	    to OwlClassDecl {
-	    return new OwlClassDecl(new List(), getElementList(), getId());
-	}
-	when (!isTopLevel())
-	    to OwlClassUse {
-	    return new OwlClassUse(new List(), getElementList(), getId());
-	}
+		when (isTopLevel())
+			to OwlClassDecl {
+			return new OwlClassDecl(new List(), getElementList(), getId());
+		}
+		when (!isTopLevel())
+			to OwlClassUse {
+			return new OwlClassUse(new List(), getElementList(), getId());
+		}
     }
 
     rewrite RdfsSubClassOf {
-	when (getNumAttribute()>0 && getAttribute(0) instanceof RdfResource)
-	    to RdfsSubClassOf {
-	    Value value = getAttribute(0).getValue();
-	    OwlClass oc = new OwlClass(new List().add(new RdfAbout(value)),
-				       new List());
-	    return new RdfsSubClassOf(new List(), 
-				      new List().add(oc));
-	}
+		when (getNumAttribute()>0 && getAttribute(0) instanceof RdfResource)
+			to RdfsSubClassOf {
+			Value value = getAttribute(0).getValue();
+			OwlClass oc = new OwlClass(new List().add(new RdfAbout(value)),
+									   new List());
+			return new RdfsSubClassOf(new List(), 
+									  new List().add(oc));
+		}
     }
 
     rewrite RdfsDomain {
-	when (getNumAttribute()>0 && getAttribute(0) instanceof RdfResource)
-	    to RdfsDomain {
-	    Value value = getAttribute(0).getValue();
-	    OwlClass oc = new OwlClass(new List().add(new RdfAbout(value)),
-				       new List());
-	    return new RdfsDomain(new List(), 
-				      new List().add(oc));
-	}
+		when (getNumAttribute()>0 && getAttribute(0) instanceof RdfResource)
+			to RdfsDomain {
+			Value value = getAttribute(0).getValue();
+			OwlClass oc = new OwlClass(new List().add(new RdfAbout(value)),
+									   new List());
+			return new RdfsDomain(new List(), 
+								  new List().add(oc));
+		}
     }
 }
diff --git a/owl.ast b/owl.ast
index b9b120e..19b4e67 100644
--- a/owl.ast
+++ b/owl.ast
@@ -18,7 +18,7 @@ RdfsSubClassOf : ComplexElement;
 RdfsSubPropertyOf : ComplexElement;
 OwlOntology : ComplexElement;
 OwlAllDifferent : ComplexElement;
-OwlAllValuesFrom : ComplexElement;
+OwlAllValuesFrom : OwlValuesFrom;
 OwlCardinality : ComplexElement;
 OwlClass : ComplexElement;
 OwlDataRange : ComplexElement;
@@ -33,7 +33,7 @@ OwlMinCardinality : ComplexElement;
 OwlObjectProperty : OwlProperty;
 OwlOneOf : ComplexElement;
 OwlOnProperty : OwlProperty;
-OwlSomeValuesFrom : ComplexElement;
+OwlSomeValuesFrom : OwlValuesFrom;
 OwlRestriction : ComplexElement;
 OwlUnionOf : ComplexElement;
 
@@ -63,12 +63,15 @@ XmlnsOwl : Attribute;
 Value ::= <STRING_LITERAL>;
 
 
-// Types generated by rewrite rules
+// Types used by rewrite rules
 abstract OClass : ComplexElement;
 OwlClassDecl : OClass ::= <Id:String> ;
 OwlClassUse : OClass ::= <Id:String> ;
 
+abstract OwlValuesFrom: ComplexElement;
+
+
 Properties ::= Property:Element*;
 Restrictions ::= OwlRestriction*;
 
-OwlProperty : ComplexElement;
+abstract OwlProperty : ComplexElement;
-- 
GitLab