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