From af79ff9f2fc95bbdede799ad0e87e0fd6228648f Mon Sep 17 00:00:00 2001 From: Anders Nilsson <anders.nilsson@cs.lth.se> Date: Thu, 30 Aug 2007 16:14:08 +0200 Subject: [PATCH] Can now parse and prettyprint config-sheet.xml. Unfortunaely some bug came afloat in the x3d example in the process. --- .bzrignore | 7 +- CompilerGeneration.jrag | 123 ++++++++++++++++++++++------------ JavaCCChunks.jrag | 18 +++-- examples/config-sheet.xml | 2 +- examples/configForm.xsd | 8 --- examples/configForm/build.xml | 28 ++++---- xmlschema.ast | 1 + xmlschema.jjt | 9 +++ 8 files changed, 124 insertions(+), 72 deletions(-) diff --git a/.bzrignore b/.bzrignore index a704a5a..604c3a0 100644 --- a/.bzrignore +++ b/.bzrignore @@ -5,6 +5,11 @@ examples/x3d/GeneratedAspects.jrag examples/x3d/Parser.java examples/x3d/x3d.ast examples/x3d/x3d.jjt -javadoc examples/x3d/PrettyPrint.java +examples/configForm/GeneratedAspects.jrag +examples/configForm/Parser.java +examples/configForm/PrettyPrint.java +examples/configForm/configForm.ast +examples/configForm/configForm.jjt +javadoc SchemaCompile.jar diff --git a/CompilerGeneration.jrag b/CompilerGeneration.jrag index 457e5fa..ca21d58 100644 --- a/CompilerGeneration.jrag +++ b/CompilerGeneration.jrag @@ -17,43 +17,28 @@ aspect AbsGrammarGeneration { } public void Start.genAbsGrammar(PrintStream pStream) { + pStream.println("// -*-Java-*- "); + pStream.println(); + pStream.println("// Automatically generated JastAdd abstract grammar file "); pStream.println("// Predefined types"); pStream.println("Start ::= Specification;"); pStream.println("Specification ::= XmlHeader [DocType] Element*;"); -// pStream.println("Specification ::= XmlHeader Element*;"); pStream.println("XmlHeader ::= Attribute*;"); pStream.println("DocType ::= <STRING>;"); pStream.println("abstract Thing : ComplexElement ::=;"); pStream.println("abstract Element;"); -// pStream.println("ComplexElement : Element ::= OwlIdentifier Attribute* Element*;"); pStream.println("ComplexElement : Element ::= Attribute* Element*;"); pStream.println("ValueElement : ComplexElement;"); pStream.println("abstract SimpleElement : Element;"); - pStream.println("StringElement : SimpleElement ::= <IDENTIFIER>;"); - pStream.println("IntElement : SimpleElement ::= <INTEGER_LITERAL>;"); - pStream.println("FloatElement : SimpleElement ::= <FLOAT_LITERAL>;"); -// pStream.println("ClassUse : Thing ::= /decl:Thing/;"); + pStream.println("StringElement : SimpleElement ::= <LITERAL>;"); + pStream.println("IntElement : SimpleElement ::= <LITERAL>;"); + pStream.println("FloatElement : SimpleElement ::= <LITERAL>;"); pStream.println("Attribute ::= AttrValue;"); -// pStream.println("RdfDatatype : Attribute ::= ;"); -// pStream.println("RdfId : Attribute ::= ;"); -// pStream.println("Xmlns : Attribute ::= ;"); -// pStream.println("XmlnsProtege : Attribute ::= ;"); -// pStream.println("XmlnsRdf : Attribute ::= ;"); -// pStream.println("XmlnsXsd : Attribute ::= ;"); -// pStream.println("XmlnsRdfs : Attribute ::= ;"); -// pStream.println("XmlnsOwl : Attribute ::= ;"); -// pStream.println("XmlnsDaml : Attribute ::= ;"); -// pStream.println("XmlnsP1 : Attribute ::= ;"); -// pStream.println("XmlnsDc : Attribute ::= ;"); -// pStream.println("XmlBase : Attribute ::= ;"); -// pStream.println("RdfResource : Attribute ::= ;"); -// pStream.println("RdfAbout : Attribute ::= ;"); -// pStream.println("RdfParseType : Attribute ::= ;"); -// pStream.println("Version : Attribute ::= ;"); -// pStream.println("Value ::= <STRING_LITERAL>;"); -// pStream.println("OwlIdentifier ::= <IDENTIFIER>;"); pStream.println("AttrValue ::= <STRING_LITERAL>;"); pStream.println("Encoding : Attribute ::=;"); + pStream.println("Version : Attribute ::=;"); + pStream.println("XmlnsXsi : Attribute ::=;"); + pStream.println("XsiNoNamespaceSchemaLocation : Attribute ::=;"); pStream.println(); pStream.println("// Generated types"); @@ -71,7 +56,7 @@ aspect AbsGrammarGeneration { void XsElement.genAbsGrammar(PrintStream pStream) { if (hasName()) { // If not, it's just a reference to an element declaration - String name = name(); + String name = fixName(name()); pStream.println(name + " : ComplexElement ::= ;"); } } @@ -130,7 +115,7 @@ aspect GenJavaCC { pStream.println("String getData() {"); pStream.println(" StringBuffer s = new StringBuffer();"); pStream.println("// jjtThis.someData = true;"); - pStream.println(" while ((getToken(1)).kind != LT && (getToken(1)).kind != GT) {"); + pStream.println(" while ((getToken(1)).kind != LT && (getToken(1)).kind != LTSLASH) {"); pStream.println(" Token t = getNextToken();"); pStream.println(" if (t.specialToken != null) {"); pStream.println(" Token tmp_t = t.specialToken;"); @@ -174,9 +159,24 @@ aspect GenJavaCC { pStream.println(" <encoding> \"=\" AttrValue()"); pStream.println("}"); pStream.println(); + pStream.println("void Version() #Version : {}"); + pStream.println("{"); + pStream.println(" <version> \"=\" AttrValue()"); + pStream.println("}"); + pStream.println(); + pStream.println("void XsiNoNamespaceSchemaLocation() #XsiNoNamespaceSchemaLocation : {}"); + pStream.println("{"); + pStream.println(" <XsiNoNamespaceSchemaLocation> \"=\" AttrValue()"); + pStream.println("}"); + pStream.println(); + pStream.println("void XmlnsXsi() #XmlnsXsi : {}"); + pStream.println("{"); + pStream.println(" <XmlnsXsi> \"=\" AttrValue()"); + pStream.println("}"); + pStream.println(); pStream.println("void Element() : {}"); pStream.println("{"); - pStream.println(" <LT> ("); + pStream.println(" ( <LT> ("); Iterator iter = elementTypes().values().iterator(); if (iter.hasNext()) { pStream.println(" "+fixName(((XsElement) iter.next()).name())+"()"); @@ -184,12 +184,46 @@ aspect GenJavaCC { while (iter.hasNext()) { pStream.println(" | "+fixName(((XsElement) iter.next()).name())+"()"); } - pStream.println(" ) "); + pStream.println(" )) "); + pStream.println(" | SimpleElement()"); + pStream.println("}"); + pStream.println(); + pStream.println("void SimpleElement() : {}"); + pStream.println("{"); + pStream.println(" IntElement()"); + pStream.println(" | FloatElement()"); + pStream.println(" | StringElement()"); + pStream.println("}"); + pStream.println(); + pStream.println("void IntElement() #IntElement : { Token t; }"); + pStream.println("{"); + pStream.println(" t = <INTEGER_LITERAL>"); + pStream.println(" {jjtThis.setLITERAL(t.image);}"); + pStream.println("}"); + pStream.println(); + pStream.println("void FloatElement() #FloatElement : { Token t; }"); + pStream.println("{"); + pStream.println(" t = <FLOAT_LITERAL>"); + pStream.println(" {jjtThis.setLITERAL(t.image);}"); pStream.println("}"); pStream.println(); + pStream.println("void StringElement() #StringElement : { Token t;String s; }"); + pStream.println("{"); + pStream.println(" t = <IDENTIFIER>"); + pStream.println(" {"); + pStream.println(" s = t.image;"); + pStream.println(" if (getToken(1).kind != GT ) {"); + pStream.println(" s += getData();"); + pStream.println(" }"); + pStream.println(" }"); + pStream.println(" {jjtThis.setLITERAL(s);}"); + pStream.println("}"); pStream.println("void Attribute() : {}"); pStream.println("{"); pStream.println(" Encoding()"); + pStream.println(" | Version()"); + pStream.println(" | XsiNoNamespaceSchemaLocation()"); + pStream.println(" | XmlnsXsi()"); iter = attributeTypes().values().iterator(); while (iter.hasNext()) { pStream.println(" | "+fixName(((XsAttribute) iter.next()).name())+"()"); @@ -212,7 +246,7 @@ aspect GenJavaCC { void XsElement.genJavaCC(PrintStream pStream) { if (hasName()) { // If not, it's just a reference to an element declaration - String name = name(); + String name = fixName(name()); pStream.println("void "+name+"() #"+name+" : {}"); pStream.println("{"); @@ -235,13 +269,12 @@ aspect GenJavaCC { pStream.println("void "+name+"() #"+name+" : {}"); pStream.println("{"); pStream.println(" <"+name+"> \"=\" AttrValue()"); -// pStream.println(" <"+name.toUpperCase()+"> \"=\" AttrValue()"); pStream.println("}"); } } void Start.genJavaCCTokens(PrintStream pStream) { - pStream.println("<DEFAULT, BOUNDS> TOKEN : /* Reserved Words */"); + pStream.println("<DEFAULT> TOKEN : /* Reserved Words */"); pStream.println("{"); Hashtable h = elementTypes(); h.putAll(attributeTypes()); @@ -250,18 +283,14 @@ aspect GenJavaCC { pStream.println(" | <DOCTYPE : \"DOCTYPE\">"); pStream.println(" | <PUBLIC : \"PUBLIC\">"); pStream.println(" | <encoding\t\t: \"encoding\">"); + pStream.println(" | <version\t\t: \"version\">"); + pStream.println(" | <XsiNoNamespaceSchemaLocation\t\t: \"xsi:noNamespaceSchemaLocation\">"); + pStream.println(" | <XmlnsXsi\t\t: \"xmlns:xsi\">"); while (iter.hasNext()) { String name = ((ComplexElement) iter.next()).name(); pStream.println(" | <"+fixName(name)+ -// pStream.println(" | <"+fixName(name).toUpperCase()+ "\t\t: \""+name+"\" >"); } -// iter = attributeTypes().iterator(); -// while (iter.hasNext()) { -// String name = ((ComplexElement) iter.next()).name(); -// pStream.println(" | <"+fixName(name).toUpperCase()+ -// "\t\t: \""+name+"\" >"); -// } pStream.println("}// Reserved Words"); pStream.println(); } @@ -301,7 +330,7 @@ aspect Types { } eq XsAttribute.attributeTypes(Hashtable h) { - if (hasName()) { + if (hasName() && !defaultAttr()) { h.put(name(),this); } super.attributeTypes(h); @@ -311,7 +340,19 @@ aspect Types { } aspect Misc { - syn String ComplexElement.name() { + static String XsAttribute.defAttrs[] = {"version"}; + + syn boolean XsAttribute.defaultAttr() { + String name = name(); + for (int i=0; i<defAttrs.length; i++) { + if (name.equals(defAttrs[i])) { + return true; + } + } + return false; + } + + syn lazy String ComplexElement.name() { for (int i=0; i<getNumAttribute(); i++) { if (getAttribute(i) instanceof Name) { return getAttribute(i).getAttValue().getSTRING_LITERAL(). @@ -322,7 +363,7 @@ aspect Misc { return "NoNameFound"; } - syn boolean ComplexElement.hasName() { + syn lazy boolean ComplexElement.hasName() { for (int i=0; i<getNumAttribute(); i++) { if (getAttribute(i) instanceof Name) { return true; diff --git a/JavaCCChunks.jrag b/JavaCCChunks.jrag index 75ea0b8..73615cb 100644 --- a/JavaCCChunks.jrag +++ b/JavaCCChunks.jrag @@ -8,6 +8,8 @@ aspect JavaCCChunks { void Start.genJavaCCHeader(PrintStream pStream) { + pStream.println("/* -*-Java-*- */"); + pStream.println(); pStream.println("options {"); pStream.println(" MULTI = true;"); pStream.println(" VISITOR = true;"); @@ -30,7 +32,8 @@ aspect JavaCCChunks { pStream.println("//----------------------------------------------//"); pStream.println("// LEXICAL TOKENS //"); pStream.println("//----------------------------------------------//"); - pStream.println("<DEFAULT, BOUNDS> SKIP : /* WHITE SPACE */"); +// pStream.println("<DEFAULT, BOUNDS> SKIP : /* WHITE SPACE */"); + pStream.println("<DEFAULT,BOUNDS> SPECIAL_TOKEN : /* WHITE SPACE */"); pStream.println("{"); pStream.println(" \" \""); pStream.println(" |"); @@ -43,7 +46,7 @@ aspect JavaCCChunks { pStream.println(" \"\\f\""); pStream.println("}// WHITE SPACE"); pStream.println(); - pStream.println("SPECIAL_TOKEN : /* COMMENTS */ "); + pStream.println("<DEFAULT,BOUNDS> SPECIAL_TOKEN : /* COMMENTS */ "); pStream.println("{"); pStream.println(" < \"<!--\" ( ~[\"-\"] | ( \"-\" ~[\"-\"] ) )* \"-->\">"); pStream.println("}// COMMENTS"); @@ -167,11 +170,12 @@ aspect JavaCCChunks { pStream.println(" | < LBRACKET : \"[\" >"); pStream.println(" | < RBRACKET : \"]\" >"); pStream.println(" | < SEMICOLON : \";\" >"); - pStream.println(" | < LTBANG : \"<!\" >"); - pStream.println(" | < LT : \"<\" >"); - pStream.println(" | < LTQ : \"<?\" >"); - pStream.println(" | < GT : \">\" >"); - pStream.println(" | < QGT : \"?>\" >"); + pStream.println(" | < LTSLASH : \"</\" > : DEFAULT"); + pStream.println(" | < LTBANG : \"<!\" > : DEFAULT"); + pStream.println(" | < LT : \"<\" > : DEFAULT"); + pStream.println(" | < LTQ : \"<?\" > : DEFAULT"); + pStream.println(" | < GT : \">\" > : BOUNDS"); + pStream.println(" | < QGT : \"?>\" > : BOUNDS"); pStream.println("}// SEPARATORS"); } diff --git a/examples/config-sheet.xml b/examples/config-sheet.xml index 30e0023..58fef25 100755 --- a/examples/config-sheet.xml +++ b/examples/config-sheet.xml @@ -145,7 +145,7 @@ <task name="selection-text-area" id="tid005"> <args> <arg0>robot</arg0> - <arg1>text area</arg1> + <arg1>i text area</arg1> </args> <one-of> <option> diff --git a/examples/configForm.xsd b/examples/configForm.xsd index 1a58494..a8ebdb1 100644 --- a/examples/configForm.xsd +++ b/examples/configForm.xsd @@ -113,14 +113,6 @@ </xs:sequence> </xs:complexType> -<!-- <xs:complexType name="MetaArgsType"> --> -<!-- <xs:simpleContent> --> -<!-- <xs:extension base="xs:string"> --> -<!-- </xs:extension> --> -<!-- </xs:simpleContent> --> -<!-- <xs:attribute name="name" type="xs:string" /> --> -<!-- </xs:complexType> --> - <xs:complexType name="TaskSequenceType"> <xs:sequence> <xs:element name="task" type="TaskType" maxOccurs="unbounded"/> diff --git a/examples/configForm/build.xml b/examples/configForm/build.xml index 6658b16..c7a6f9b 100644 --- a/examples/configForm/build.xml +++ b/examples/configForm/build.xml @@ -43,7 +43,7 @@ </fileset> </jastadd> <jjtree - target="x3d.jjt" + target="configForm.jjt" outputdirectory="${package}" javacchome="${javacc.home}" buildnodefiles="true" @@ -55,7 +55,7 @@ nodepackage="${package}" /> <javacc - target="${package}/x3d.jj" + target="${package}/configForm.jj" outputdirectory="${package}" javacchome="${javacc.home}" buildparser="true" @@ -83,11 +83,11 @@ <!-- <beaver file="parser/JavaParser.beaver" terminalNames="yes" compress="no" useSwitch="yes"/> --> </target> - <target name="test" depends="build"> - <java classname="GenCompiler" classpath="."> - <arg value="GripperOntology_experimental3.owl" /> - </java> - </target> +<!-- <target name="test" depends="build"> --> +<!-- <java classname="GenCompiler" classpath="."> --> +<!-- <arg value="GripperOntology_experimental3.owl" /> --> +<!-- </java> --> +<!-- </target> --> <!-- remove generated source files and .class files --> <target name="clean" depends="cleanGen"> @@ -97,13 +97,13 @@ </delete> </target> - <target name="jar" depends="build"> - <jar destfile="X3DCompiler.jar" basedir="." includes="**/*.class" excludes="test/**"> - <manifest> - <attribute name="Main-Class" value="GenOntology"/> - </manifest> - </jar> - </target> +<!-- <target name="jar" depends="build"> --> +<!-- <jar destfile="X3DCompiler.jar" basedir="." includes="**/*.class" excludes="test/**"> --> +<!-- <manifest> --> +<!-- <attribute name="Main-Class" value="GenOntology"/> --> +<!-- </manifest> --> +<!-- </jar> --> +<!-- </target> --> <!-- remove generated source files and their .class files --> <target name="cleanGen"> diff --git a/xmlschema.ast b/xmlschema.ast index 161bc08..38561f0 100644 --- a/xmlschema.ast +++ b/xmlschema.ast @@ -36,6 +36,7 @@ XsMinLength : ComplexElement; XsPattern : ComplexElement; XsRestriction : ComplexElement; XsSequence : ComplexElement; +XsSimpleContent : ComplexElement; XsSimpleType : ComplexElement; XsSchema : ComplexElement; XsWhiteSpace : ComplexElement; diff --git a/xmlschema.jjt b/xmlschema.jjt index 068cc8e..148869b 100644 --- a/xmlschema.jjt +++ b/xmlschema.jjt @@ -89,6 +89,7 @@ SPECIAL_TOKEN : /* COMMENTS */ | < XS_RESTRICTION : "xs:restriction" > | < XS_SEQUENCE : "xs:sequence" > | < XS_SCHEMA : "xs:schema" > + | < XS_SIMPLECONTENT : "xs:simpleContent" > | < XS_SIMPLETYPE : "xs:simpleType" > | < XS_WHITESPACE : "xs:whiteSpace" > | < ABSTRACT : "abstract" > @@ -244,6 +245,7 @@ SPECIAL_TOKEN : /* COMMENTS */ | < COMMA : "," > | < DOT : "." > | < SQUOTE : "'" > + | < AT : "@" > }// SEPARATORS @@ -354,6 +356,7 @@ void Element() : {} | XsPattern() | XsRestriction() | XsSequence() + | XsSimpleContent() | XsSimpleType() | XsWhiteSpace() )) @@ -486,6 +489,12 @@ void XsSequence() #XsSequence : {} (">" ElementList() "</" <XS_SEQUENCE> ">" | ElementList() "/>") } +void XsSimpleContent() #XsSimpleContent : {} +{ + <XS_SIMPLECONTENT> AttributeList() + (">" ElementList() "</" <XS_SIMPLECONTENT> ">" | ElementList() "/>") +} + void XsSimpleType() #XsSimpleType : {} { <XS_SIMPLETYPE> AttributeList() -- GitLab