diff --git a/CompilerGeneration.jrag b/CompilerGeneration.jrag index 180daf818af654e0e9bbdc19e448d4f501d7761a..1eec5a069111b1d2d0b6292e36c8c110281656c8 100644 --- a/CompilerGeneration.jrag +++ b/CompilerGeneration.jrag @@ -22,6 +22,7 @@ aspect AbsGrammarGeneration { pStream.println("abstract Thing : ComplexElement ::=;"); pStream.println("abstract Element;"); pStream.println("ComplexElement : Element ::= OwlIdentifier Attribute* Element*;"); + pStream.println("ValueElement : ComplexElement;"); pStream.println("abstract SimpleElement : Element;"); pStream.println("StringElement : SimpleElement ::= OwlIdentifier;"); pStream.println("IntElement : SimpleElement ::= <INTEGER_LITERAL>;"); @@ -184,6 +185,16 @@ aspect GenRewrites { public void Start.genRewrites(PrintStream pStream) { pStream.println(); pStream.println("aspect Rewrites {"); + pStream.println(ind(1)+"rewrite ComplexElement {"); + pStream.println(ind(2)+"when (getOwlIdentifier().getIDENTIFIER().equals(\"value\") && !(this instanceof ValueElement))"); + pStream.println(ind(3)+"to ValueElement {"); + pStream.println(ind(3)+"ValueElement node = new ValueElement();"); + 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)+"}"); super.genRewrites(pStream); pStream.println("}"); } @@ -199,15 +210,16 @@ aspect GenRewrites { 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)+"node.setElementList(getElementList());"); Restrictions restr = getRestrictions(); - pStream.println(ind(3)+"List l;"); + pStream.println(ind(3)+"List l, remain;"); + pStream.println(ind(3)+"remain = new List();"); for (int i=0; i<restr.getNumOwlRestriction(); i++) { OwlRestriction r = restr.getOwlRestriction(i); pStream.println(ind(3)+"l = new List();"); pStream.println(ind(3)+"for (int i=0; i<getNumElement(); i++) {"); - pStream.println(ind(3)+"ComplexElement e = (ComplexElement) getElement(i);"); - pStream.println(ind(4)+"if (e.getNumElement() > 0 && e.getElement(0) instanceof "+r.name()+") {"); + pStream.println(ind(4)+"ComplexElement e = (ComplexElement) getElement(i);"); + pStream.println(ind(4)+"if (e.getNumElement() > 0 && e.getElement(0) instanceof "+r.name()+" ) {"); pStream.println(ind(5)+"l.add(e.getElement(0));"); pStream.println(ind(4)+"}"); pStream.println(ind(3)+"}"); @@ -218,6 +230,12 @@ aspect GenRewrites { pStream.println(ind(3)+"node.set"+r.name()+"(c"+(ix++)+");"); } } + pStream.println(ind(3)+"for (int i=0; i<getNumElement(); i++) {"); + pStream.println(ind(4)+"if (getElement(i) instanceof ValueElement) {"); + pStream.println(ind(5)+"remain.add(getElement(i));"); + pStream.println(ind(4)+"}"); + pStream.println(ind(3)+"}"); + pStream.println(ind(3)+"node.setElementList(remain);"); pStream.println(ind(3)+"return node;"); pStream.println(ind(2)+"}"); pStream.println(ind(1)+"}");