From c5267f39405305e3cbef1b78821f90ddbd6cdc26 Mon Sep 17 00:00:00 2001
From: Anders Nilsson <anders.nilsson@cs.lth.se>
Date: Wed, 10 Jan 2007 22:08:11 +0100
Subject: [PATCH] Synching

---
 .bzrignore          |   1 +
 examples/simple.xsd |  15 +++
 xmlschema.ast       |  47 +++++----
 xmlschema.jjt       | 246 ++++++++++++++++++++++++++++++++++++++------
 4 files changed, 260 insertions(+), 49 deletions(-)
 create mode 100644 examples/simple.xsd

diff --git a/.bzrignore b/.bzrignore
index 526e9d3..1227e82 100644
--- a/.bzrignore
+++ b/.bzrignore
@@ -1,2 +1,3 @@
 AST
 *.class
+semantic.cache
diff --git a/examples/simple.xsd b/examples/simple.xsd
new file mode 100644
index 0000000..f17fc75
--- /dev/null
+++ b/examples/simple.xsd
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- edited with XMLSpy v2006 sp1 U (http://www.altova.com) by Don Brutzman (Naval Postgraduate School) -->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" version="3.0.1">
+	<!--======================================================================-->
+	<!-- Public and private schema extension mechanisms -->
+	<xs:include schemaLocation="x3d-3.0-Web3dExtensionsPublic.xsd"/>
+	<xs:include schemaLocation="x3d-3.0-Web3dExtensionsPrivate.xsd"/>
+	<!--======================================================================-->
+	<xs:annotation>
+		<xs:appinfo>XML Schema for the Extensible 3D (X3D) Graphics Specification tagset</xs:appinfo>
+	</xs:annotation>
+		<xs:appinfo> </xs:appinfo>
+	<!--======================================================================-->
+	<!--Several pattern possibilities for urls/URNs are conceivable, perhaps a type definition or regex pattern is preferable.-->
+</xs:schema>
diff --git a/xmlschema.ast b/xmlschema.ast
index 61d42fc..8080d6e 100644
--- a/xmlschema.ast
+++ b/xmlschema.ast
@@ -1,14 +1,14 @@
 // -*-Java-*-
 
  
-// Copyright (C) 2006  Anders Nilsson <anders.nilsson@cs.lth.se>
+// Copyright (C) 2007  Anders Nilsson <anders.nilsson@cs.lth.se>
 //
-// This file is part of OntologyCompiler.
+// This file is part of XmlSchemaCompiler.
 
 
 Start ::= Specification;
 
-Specification ::= XmlHeader; // RdfDeclaration;
+Specification ::= XmlHeader XsSchema;
 
 XmlHeader ::= Attribute*;
 
@@ -16,11 +16,23 @@ abstract Element;
 abstract ComplexElement : Element ::= Attribute* Element*;
 
 XsAnnotation     : ComplexElement;
+XsAppinfo        : ComplexElement;
+XsAttribute      : ComplexElement;
+XsAttributeGroup : ComplexElement;
+XsComplexContent : ComplexElement;
+XsComplexType    : ComplexElement;
 XsDocumentation  : ComplexElement;
+XsEnumeration    : ComplexElement;
+XsExtension      : ComplexElement;
+XsGroup          : ComplexElement;
 XsInclude        : ComplexElement;
+XsList           : ComplexElement;
+XsMinLength      : ComplexElement;
+XsPattern        : ComplexElement;
 XsRestriction    : ComplexElement;
 XsSimpleType     : ComplexElement;
 XsSchema         : ComplexElement;
+XsWhiteSpace     : ComplexElement;
 
 
 abstract SimpleElement : Element;
@@ -28,34 +40,29 @@ StringElement : SimpleElement ::= <IDENTIFIER>;
 IntElement : SimpleElement ::= <INTEGER_LITERAL>;
 FloatElement : SimpleElement ::= <FLOAT_LITERAL>;
 
-abstract Attribute ::= Value;
+abstract Attribute ::= AttValue;
+Abstract             : Attribute;
 AttributeFormDefault : Attribute;
 Base                 : Attribute;
+Default              : Attribute;
 ElementFormDefault   : Attribute;
 Encoding             : Attribute;
+ItemType             : Attribute;
+MinOccurs            : Attribute;
+MaxOccurs            : Attribute;
+Mixed                : Attribute;
+Name                 : Attribute;
+Ref                  : Attribute;
 Source               : Attribute;
 SchemaLocation       : Attribute;
+Type                 : Attribute;
+Value                : Attribute;
 Version              : Attribute;
 XmlnsXs              : Attribute;
-// RdfAbout : Attribute;
-// RdfDatatype : Attribute;
-// RdfId : Attribute;
-// RdfParseType : Attribute;
-// RdfResource : Attribute;
-// XmlBase : Attribute;
-// Xmlns : Attribute;
-// XmlnsDaml : Attribute;
-// XmlnsDc : Attribute;
-// XmlnsP1 : Attribute;
-// XmlnsProtege : Attribute;
-// XmlnsRdf : Attribute;
-// XmlnsXsd : Attribute;
-// XmlnsRdfs : Attribute;
-// XmlnsOwl : Attribute;
 
 // DiscardedElement : Element ::= Identifier Attribute* Element*;
 
-Value ::= <STRING_LITERAL>;
+AttValue ::= <STRING_LITERAL>;
 // Identifier ::= <IDENTIFIER>;
 
 // // Types used by rewrite rules
diff --git a/xmlschema.jjt b/xmlschema.jjt
index b4abcc1..883dce9 100644
--- a/xmlschema.jjt
+++ b/xmlschema.jjt
@@ -14,9 +14,9 @@ options {
     NODE_PREFIX                 = "";
     JAVA_UNICODE_ESCAPE         = true;
     STATIC                      = false;
-  	DEBUG_PARSER                = true;
-//  	DEBUG_LOOKAHEAD             = true;
-  	DEBUG_TOKEN_MANAGER         = true;
+   	DEBUG_PARSER                = true;
+//   	DEBUG_LOOKAHEAD             = true;
+//    	DEBUG_TOKEN_MANAGER         = true;
 } // options
 
 
@@ -31,7 +31,8 @@ PARSER_END(SchemaParser)
 //                           LEXICAL TOKENS                           //
 //--------------------------------------------------------------------//
 
-<DEFAULT, BOUNDS> SKIP : /* WHITE SPACE */
+// <DEFAULT, BOUNDS> SKIP : /* WHITE SPACE */
+SPECIAL_TOKEN : /* WHITE SPACE */
 {
     " "
     |
@@ -68,17 +69,39 @@ SPECIAL_TOKEN : /* COMMENTS */
 {
     < XS_ANNOTATION            : "xs:annotation" >
   | < XS_APPINFO               : "xs:appinfo" >
+  | < XS_ATTRIBUTE             : "xs:attribute" >
+  | < XS_ATTRIBUTEGROUP        : "xs:attributeGroup" >
+  | < XS_COMPLEXCONTENT        : "xs:complexContent" >
+  | < XS_COMPLEXTYPE           : "xs:complexType" >
   | < XS_DOCUMENTATION         : "xs:documentation" >
+  | < XS_ENUMERATION           : "xs:enumeration" >
+  | < XS_EXTENSION             : "xs:extension" >
+  | < XS_GROUP                 : "xs:group" >
   | < XS_INCLUDE               : "xs:include" >
+  | < XS_LIST                  : "xs:list" >
+  | < XS_MINLENGTH             : "xs:minLength" >
+  | < XS_PATTERN               : "xs:pattern" >
   | < XS_RESTRICTION           : "xs:restriction" >
   | < XS_SCHEMA                : "xs:schema" >
   | < XS_SIMPLETYPE            : "xs:simpleType" >
+  | < XS_WHITESPACE            : "xs:whiteSpace" >
+  | < ABSTRACT                 : "abstract" >
   | < ATTRIBUTEFORMDEFAULT     : "attributeFormDefault" >
   | < BASE                     : "base" >
+  | < DEFAULT_ATTR             : "default" >
   | < ELEMENTFORMDEFAULT       : "elementFormDefault" >
   | < ENCODING                 : "encoding" >
+  | < FIXED                    : "fixed" >
+  | < ITEMTYPE                 : "itemType" >
+  | < MINOCCURS                : "minOccurs" >
+  | < MAXOCCURS                : "maxOccurs" >
+  | < MIXED                    : "mixed" >
+  | < NAME                     : "name" >
+  | < REF                      : "ref" >
   | < SCHEMALOCATION           : "schemaLocation" >
   | < SOURCE                   : "source" >
+  | < TYPE                     : "type" >
+  | < VALUE                    : "value" >
   | < VERSION                  : "version" >
   | < XML                      : "xml"          >
   | < XMLNS_XS                 : "xmlns:xs"          >
@@ -130,19 +153,25 @@ SPECIAL_TOKEN : /* COMMENTS */
     |
     < STRING_LITERAL:
         "\""
-        (   (~["\"","\\","\n","\r"])
-            |
-            ("\\"
-                (    ["n","t","b","r","f","\\","'","\""]
-                     |
-                     ["0"-"7"] ( ["0"-"7"] )?
-                     |
-                     ["0"-"3"] ["0"-"7"] ["0"-"7"]
-                )
-            )
+        (   (~["\""])
         )*
         "\""
     >
+//     < STRING_LITERAL:
+//         "\""
+//         (   (~["\"","\\","\n","\r"])
+//             |
+//             ("\\"
+//                 (    ["n","t","b","r","f","\\","'","\""]
+//                      |
+//                      ["0"-"7"] ( ["0"-"7"] )?
+//                      |
+//                      ["0"-"3"] ["0"-"7"] ["0"-"7"]
+//                 )
+//             )
+//         )*
+//         "\""
+//     >
 }// LITERALS
 
 <DEFAULT, BOUNDS> TOKEN : /* IDENTIFIERS */
@@ -156,6 +185,7 @@ SPECIAL_TOKEN : /* COMMENTS */
         "\u005f",
         "\u0061"-"\u007a",
         "\u00c0"-"\u00d6",
+		"\u00d7",
         "\u00d8"-"\u00f6",
         "\u00f8"-"\u00ff",
         "\u0100"-"\u1fff",
@@ -224,8 +254,9 @@ SPECIAL_TOKEN : /* COMMENTS */
      | < MINUS                : "-"    >
 //     | < STAR                 : "*"    >
      | < SLASH                : "/"    >
+     | < BACKSLASH            : "\\"    >
 //     | < BIT_AND              : "&"    >
-//     | < BIT_OR               : "|"    >
+     | < VBAR                 : "|"    >
 //     | < XOR                  : "^"    >
 //     | < REM                  : "%"    >
 //     | < LSHIFT               : "<<"   >
@@ -288,10 +319,21 @@ void Element() : {}
 {
     ( "<" (XsAnnotation()
 		| XsAppinfo()
+		| XsAttribute()
+		| XsAttributeGroup()
+		| XsComplexContent()
+		| XsComplexType()
         | XsDocumentation()
+        | XsEnumeration()
+        | XsExtension()
+        | XsGroup()
         | XsInclude()
+        | XsList()
+        | XsMinLength()
+        | XsPattern()
         | XsRestriction()
         | XsSimpleType()
+        | XsWhiteSpace()
 	    ))
  	| SimpleElement()
 }
@@ -308,18 +350,78 @@ void XsAppinfo() #XsAppinfo : {}
 		 (">" ElementList() "</" <XS_APPINFO> ">" | ElementList() "/>")
 }
 
+void XsAttribute() #XsAttribute : {}
+{
+    <XS_ATTRIBUTE> AttributeList() 
+		 (">" ElementList() "</" <XS_ATTRIBUTE> ">" | ElementList() "/>")
+}
+
+void XsAttributeGroup() #XsAttributeGroup : {}
+{
+    <XS_ATTRIBUTEGROUP> AttributeList() 
+		 (">" ElementList() "</" <XS_ATTRIBUTEGROUP> ">" | ElementList() "/>")
+}
+
+void XsComplexContent() #XsComplexContent : {}
+{
+    <XS_COMPLEXCONTENT> AttributeList() 
+		 (">" ElementList() "</" <XS_COMPLEXCONTENT> ">" | ElementList() "/>")
+}
+
+void XsComplexType() #XsComplexType : {}
+{
+    <XS_COMPLEXTYPE> AttributeList() 
+		 (">" ElementList() "</" <XS_COMPLEXTYPE> ">" | ElementList() "/>")
+}
+
 void XsDocumentation() #XsDocumentation : {}
 {
     <XS_DOCUMENTATION> AttributeList() 
 		 (">" ElementList() "</" <XS_DOCUMENTATION> ">" | ElementList() "/>")
 }
 
+void XsEnumeration() #XsEnumeration : {}
+{
+    <XS_ENUMERATION> AttributeList() 
+		 (">" ElementList() "</" <XS_ENUMERATION> ">" | ElementList() "/>")
+}
+
+void XsExtension() #XsExtension : {}
+{
+    <XS_EXTENSION> AttributeList() 
+		 (">" ElementList() "</" <XS_EXTENSION> ">" | ElementList() "/>")
+}
+
+void XsGroup() #XsGroup : {}
+{
+    <XS_GROUP> AttributeList() 
+		 (">" ElementList() "</" <XS_GROUP> ">" | ElementList() "/>")
+}
+
 void XsInclude() #XsInclude : {}
 {
     <XS_INCLUDE> AttributeList() 
 		 (">" ElementList() "</" <XS_INCLUDE> ">" | ElementList() "/>")
 }
 
+void XsList() #XsList : {}
+{
+    <XS_LIST> AttributeList() 
+		 (">" ElementList() "</" <XS_LIST> ">" | ElementList() "/>")
+}
+
+void XsMinLength() #XsMinLength : {}
+{
+    <XS_MINLENGTH> AttributeList() 
+		 (">" ElementList() "</" <XS_MINLENGTH> ">" | ElementList() "/>")
+}
+
+void XsPattern() #XsPattern : {}
+{
+    <XS_PATTERN> AttributeList() 
+		 (">" ElementList() "</" <XS_PATTERN> ">" | ElementList() "/>")
+}
+
 void XsRestriction() #XsRestriction : {}
 {
     <XS_RESTRICTION> AttributeList() 
@@ -332,6 +434,12 @@ void XsSimpleType() #XsSimpleType : {}
 		 (">" ElementList() "</" <XS_SIMPLETYPE> ">" | ElementList() "/>")
 }
 
+void XsWhiteSpace() #XsWhiteSpace : {}
+{
+    <XS_WHITESPACE> AttributeList() 
+		 (">" ElementList() "</" <XS_WHITESPACE> ">" | ElementList() "/>")
+}
+
 void SimpleElement() : {}
 {
     IntElement()
@@ -359,17 +467,31 @@ void StringElement() #StringElement : { Token t;String s; }
 	{
 		s = t.image;
 		if (getToken(1).kind != LT ) {
-		getData(s);
+		s += getData();
 	}
 	}
-        {jjtThis.setIDENTIFIER(t.image);}
+        {jjtThis.setIDENTIFIER(s);}
 }
 
 JAVACODE
-void getData(String s) {
+String getData() {
+	StringBuffer s = new StringBuffer();
 //     jjtThis.someData = true;
-    while ((getToken(1)).kind != END_TAG)
-        s += getNextToken().image;
+    while ((getToken(1)).kind != LT && (getToken(1)).kind != END_TAG) {
+		Token t = getNextToken();
+		if (t.specialToken != null) {
+			Token tmp_t = t.specialToken;
+			while (tmp_t.specialToken != null) {
+				tmp_t = tmp_t.specialToken;
+			}
+			while (tmp_t != null) {
+				s.append(tmp_t.image);
+				tmp_t = tmp_t.next;
+			}
+		}
+		s.append(t.image);
+	}
+	return s.toString();
 }
 
 void AttributeList() #List : {}
@@ -380,58 +502,124 @@ void AttributeList() #List : {}
 void Attribute() : {}
 {
     Version()
+  |	Abstract()
   |	AttributeFormDefault()
   |	Base()
+  |	Default()
   |	ElementFormDefault()
   |	Encoding()
+  |	Fixed()
+  |	ItemType()
+  |	MinOccurs()
+  |	MaxOccurs()
+  |	Mixed()
+  |	Name()
+  |	Ref()
   |	Source()
   |	SchemaLocation()
+  |	Type()
+  |	Value()
   |	XmlnsXs()
 }
 
 void AttributeFormDefault() #AttributeFormDefault : {}
 {
-    <ATTRIBUTEFORMDEFAULT> <ASSIGN> Value()
+    <ATTRIBUTEFORMDEFAULT> <ASSIGN> AttValue()
+}
+
+void Abstract() #Abstract : {}
+{
+    <ABSTRACT> <ASSIGN> AttValue()
 }
 
 void Base() #Base : {}
 {
-    <BASE> <ASSIGN> Value()
+    <BASE> <ASSIGN> AttValue()
+}
+
+void Default() #Default : {}
+{
+    <DEFAULT_ATTR> <ASSIGN> AttValue()
 }
 
 void ElementFormDefault() #ElementFormDefault : {}
 {
-    <ELEMENTFORMDEFAULT> <ASSIGN> Value()
+    <ELEMENTFORMDEFAULT> <ASSIGN> AttValue()
 }
 
 void Encoding() #Encoding : {}
 {
-    <ENCODING> <ASSIGN> Value()
+    <ENCODING> <ASSIGN> AttValue()
+}
+
+void Fixed() #Fixed : {}
+{
+    <FIXED> <ASSIGN> AttValue()
+}
+
+void MaxOccurs() #MaxOccurs : {}
+{
+    <MAXOCCURS> <ASSIGN> AttValue()
+}
+
+void MinOccurs() #MinOccurs : {}
+{
+    <MINOCCURS> <ASSIGN> AttValue()
+}
+
+void Mixed() #Mixed : {}
+{
+    <MIXED> <ASSIGN> AttValue()
+}
+
+void Name() #Name : {}
+{
+    <NAME> <ASSIGN> AttValue()
+}
+
+void ItemType() #ItemType : {}
+{
+    <ITEMTYPE> <ASSIGN> AttValue()
+}
+
+void Ref() #Ref : {}
+{
+    <REF> <ASSIGN> AttValue()
 }
 
 void Source() #Source : {}
 {
-    <SOURCE> <ASSIGN> Value()
+    <SOURCE> <ASSIGN> AttValue()
 }
 
 void SchemaLocation() #SchemaLocation : {}
 {
-    <SCHEMALOCATION> <ASSIGN> Value()
+    <SCHEMALOCATION> <ASSIGN> AttValue()
 }
 
 void Version() #Version : {}
 {
-    <VERSION> <ASSIGN> Value()
+    <VERSION> <ASSIGN> AttValue()
+}
+
+void Type() #Type : {}
+{
+    <TYPE> <ASSIGN> AttValue()
+}
+
+void Value() #Value : {}
+{
+    <VALUE> <ASSIGN> AttValue()
 }
 
 void XmlnsXs() #XmlnsXs : {}
 {
-    <XMLNS_XS> <ASSIGN> Value()
+    <XMLNS_XS> <ASSIGN> AttValue()
 }
 
 
 
-void Value() #Value : { Token t; }
+void AttValue() #AttValue : { Token t; }
 {
     t = <STRING_LITERAL>
 	{jjtThis.setSTRING_LITERAL(t.image);}
-- 
GitLab