Skip to content
Snippets Groups Projects
xmlschema.jjt 16.51 KiB
/* -*-Java-*- */

/* 
 * Copyright (C) 2007  Anders Nilsson <anders.nilsson@cs.lth.se>
 *
 * This file is part of XmlSchemaCompiler.
 */

options {
    MULTI                       = true;
    VISITOR                     = true;
    NODE_DEFAULT_VOID           = true;
    NODE_SCOPE_HOOK             = false;
    NODE_PREFIX                 = "";
    JAVA_UNICODE_ESCAPE         = true;
    STATIC                      = false;
//  	DEBUG_PARSER                = true;
// 	DEBUG_LOOKAHEAD             = true;
//  	DEBUG_TOKEN_MANAGER         = true;
} // options


PARSER_BEGIN(SchemaParser)
package AST;
public class SchemaParser {
}
PARSER_END(SchemaParser)


//--------------------------------------------------------------------//
//                           LEXICAL TOKENS                           //
//--------------------------------------------------------------------//

<DEFAULT, BOUNDS> SKIP : /* WHITE SPACE */
{
    " "
    |
    "\t"
    |
    "\n"
    |
    "\r"
    |
    "\f"
}// WHITE SPACE


// <DEFAULT,BOUNDS> SPECIAL_TOKEN : /* COMMENTS */
// {
//     <SLASH_SLASH_COMMENT :  "//" (~["\n","\r"])* >
// }

SPECIAL_TOKEN : /* COMMENTS */
{
//     <SLASH_STAR_COMMENT  :  "/*" (~["*"])* "*" ("*" | (~["*","/"] (~["*"])* "*"))* "/"  >
< "<!--" ( ~["-"] | ( "-" ~["-"] ) )* "-->">
// 	| < "<rdfs:comment" ( ~["<"] | ( "<" ~["/"] ) )* "</rdfs:comment>" >
//     <XML_COMMENT  :  "<!--" (~["-","-",">"])* "-->"  >
}// COMMENTS


// <BOUNDS> TOKEN: {
//     < BEGINCOMMENT : "<!--"     >
//   | < ENDCOMMENT   : "-->"     >
// }

<DEFAULT, BOUNDS> TOKEN : /* RESERVED WORDS AND LITERALS */
{
//     < OWL_ALLVALUESFROM     : "owl:allValuesFrom" >
//   | < OWL_ALLDIFFERENT      : "owl:AllDifferent" >
//   | < OWL_CARDINALITY        : "owl:cardinality" >
//   | < OWL_CLASS             : "owl:Class" >
//   | < OWL_DATARANGE         : "owl:DataRange" >
//   | < OWL_DATATYPEPROPERTY  : "owl:DatatypeProperty" >
//   | < OWL_DISJOINTWITH      : "owl:disjointWith" >
//   | < OWL_DISTINCTMEMBERS      : "owl:distinctMembers" >
//   | < OWL_EQUIVALENTCLASS   : "owl:equivalentClass" >
//   | < OWL_FUNCTIONALPROPERTY : "owl:FunctionalProperty" >
//   | < OWL_IMPORTS            : "owl:imports" >
//   | < OWL_INTERSECTIONOF     : "owl:intersectionOf" >
//   | < OWL_INVERSEOF         : "owl:inverseOf" >
//   | < OWL_MINCARDINALITY     : "owl:minCardinality" >
//   | < OWL_OBJECTPROPERTY    : "owl:ObjectProperty" >
//   | < OWL_ONPROPERTY        : "owl:onProperty" >
//   | < OWL_ONEOF             : "owl:oneOf" >
//   | < OWL_ONTOLOGY          : "owl:Ontology" >
//   | < OWL_RESTRICTION       : "owl:Restriction" >
//   | < OWL_SOMEVALUESFROM    : "owl:someValuesFrom" >
//   | < OWL_UNIONOF           : "owl:unionOf" >
//   | < RDF_RDF            : "rdf:RDF"      >
//   | < RDF_ABOUT          : "rdf:about" >
//   | < RDF_DATATYPE          : "rdf:datatype" >
//   | < RDF_ID                : "rdf:ID" >
//   | < RDF_FIRST             : "rdf:first" >
//   | < RDF_REST              : "rdf:rest" >
//   | < RDF_PARSETYPE         : "rdf:parseType" >
//   | < RDF_RESOURCE          : "rdf:resource" >
//   | < RDF_TYPE              : "rdf:type" >
//   | < RDFS_COMMENT          : "rdfs:comment" >
//   | < RDFS_DOMAIN           : "rdfs:domain" >
//   | < RDFS_RANGE            : "rdfs:range" >
//   | < RDFS_SUBCLASSOF       : "rdfs:subClassOf" >
//   | < RDFS_SUBPROPERTYOF     : "rdfs:subPropertyOf" >
//   | < VERSION               : "version" >
//   | < XML                   : "xml"          >
//   | < XML_BASE              : "xml:base" >
//   | < XMLNS                 : "xmlns" >	 
//   | < XMLNS_DAML            : "xmlns:daml" >	 
//   | < XMLNS_DC              : "xmlns:dc" >	 
//   | < XMLNS_P1              : "xmlns:p1" >	 
//   | < XMLNS_PROTEGE         : "xmlns:protege" >	 
//   | < XMLNS_RDF             : "xmlns:rdf" >	 
//   | < XMLNS_XSD             : "xmlns:xsd" >	 
//   | < XMLNS_RDFS            : "xmlns:rdfs" >	 
//   | < XMLNS_OWL             : "xmlns:owl" >	 

}// RESERVED WORDS AND LITERALS
<DEFAULT, BOUNDS> TOKEN : /* LITERALS */
{
    < INTEGER_LITERAL:
        <DECIMAL_LITERAL> (["l","L"])?
        |
        <HEX_LITERAL> (["l","L"])?
        |
        <OCTAL_LITERAL> (["l","L"])?
    >
    |
    < #DECIMAL_LITERAL: ["1"-"9"] (["0"-"9"])* >
    |
    < #HEX_LITERAL: "0" ["x","X"] (["0"-"9","a"-"f","A"-"F"])+ >
    |
    < #OCTAL_LITERAL: "0" (["0"-"7"])* >
    |
    < FLOAT_LITERAL:
        (["0"-"9"])+ "." (["0"-"9"])* (<EXPONENT>)? (["f","F","d","D"])?
        |
        "." (["0"-"9"])+ (<EXPONENT>)? (["f","F","d","D"])?
        |
        (["0"-"9"])+ <EXPONENT> (["f","F","d","D"])?
        |
        (["0"-"9"])+ (<EXPONENT>)? ["f","F","d","D"]
    >
    |
    < #EXPONENT: ["e","E"] (["+","-"])? (["0"-"9"])+ >
    |
    < CHARACTER_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 */
{
    < IDENTIFIER: <LETTER> (<LETTER>|<DIGIT>|"-")* >
    |
    < #LETTER:
        [
        "\u0024",
        "\u0041"-"\u005a",
        "\u005f",
        "\u0061"-"\u007a",
        "\u00c0"-"\u00d6",
        "\u00d8"-"\u00f6",
        "\u00f8"-"\u00ff",
        "\u0100"-"\u1fff",
        "\u3040"-"\u318f",
        "\u3300"-"\u337f",
        "\u3400"-"\u3d2d",
        "\u4e00"-"\u9fff",
        "\uf900"-"\ufaff"
        ]
    >
    |
    < #DIGIT:
        [
        "\u0030"-"\u0039",
        "\u0660"-"\u0669",
        "\u06f0"-"\u06f9",
        "\u0966"-"\u096f",
        "\u09e6"-"\u09ef",
        "\u0a66"-"\u0a6f",
        "\u0ae6"-"\u0aef",
        "\u0b66"-"\u0b6f",
        "\u0be7"-"\u0bef",
        "\u0c66"-"\u0c6f",
        "\u0ce6"-"\u0cef",
        "\u0d66"-"\u0d6f",
        "\u0e50"-"\u0e59",
        "\u0ed0"-"\u0ed9",
        "\u1040"-"\u1049"
        ]
    >
}// IDENTIFIERS

<DEFAULT,BOUNDS> TOKEN : /* SEPARATORS */
{
//       < LPAREN               : "("    >
//     | < RPAREN               : ")"    >
     < LBRACE               : "{"    >
    | < RBRACE               : "}"    >
    | < LBRACKET             : "["    >
    | < RBRACKET             : "]"    >
    | < SEMICOLON            : ";"    >
    | < COMMA                : ","    >
    | < DOT                  : "."    >
}// SEPARATORS


<DEFAULT,BOUNDS> TOKEN : /* OPERATORS */
{
      < ASSIGN               : "="    >
//     | < GT                   : ">"    >
//     | < LT                   : "<"    >
//     | < BANG                 : "!"    >
//     | < TILDE                : "~"    >
//     | < HOOK                 : "?"    >
     | < COLON                : ":"    >
//     | < EQ                   : "=="   >
//     | < LE                   : "<="   >
//     | < GE                   : ">="   >
//     | < NE                   : "!="   >
//     | < SC_OR                : "||"   >
//     | < SC_AND               : "&&"   >
//     | < INCR                 : "++"   >
//     | < DECR                 : "--"   >
     | < PLUS                 : "+"    >
     | < MINUS                : "-"    >
//     | < STAR                 : "*"    >
     | < SLASH                : "/"    >
//     | < BIT_AND              : "&"    >
//     | < BIT_OR               : "|"    >
//     | < XOR                  : "^"    >
//     | < REM                  : "%"    >
//     | < LSHIFT               : "<<"   >
//     | < RSIGNEDSHIFT         : ">>"   >
//     | < RUNSIGNEDSHIFT       : ">>>"  >
//     | < PLUSASSIGN           : "+="   >
//     | < MINUSASSIGN          : "-="   >
//     | < STARASSIGN           : "*="   >
//     | < SLASHASSIGN          : "/="   >
//     | < ANDASSIGN            : "&="   >
//     | < ORASSIGN             : "|="   >
//     | < XORASSIGN            : "^="   >
//     | < REMASSIGN            : "%="   >
//     | < LSHIFTASSIGN         : "<<="  >
//     | < RSIGNEDSHIFTASSIGN   : ">>="  >
//     | < RUNSIGNEDSHIFTASSIGN : ">>>=" >
}// OPERATORS


// <DEFAULT,BOUNDS> TOKEN : /* TEXT */
// {
//     < TEXT : <LETTER> (~["<",">"])*    >
// }// TEXT


//--------------------------------------------------------------------//
//                      THE OWL LANGUAGE GRAMMAR                     //
//--------------------------------------------------------------------//

Start Start() #Start : {}
{
    Specification()
  { return jjtThis; }
}

void Specification() #Specification : {}
{
    XmlHeader()
	RdfDeclaration()
}

void XmlHeader() #XmlHeader : {}
{
    "<?" <XML> AttributeList() "?>"
}

void RdfDeclaration() #RdfDeclaration : {}
{
    "<"  <RDF_RDF> AttributeList() ">"
	ElementList()
    "</" <RDF_RDF> ">"
}

void ElementList() #List : {}
{
    (Element())*    
}

void Element() : {}
{
    ( "<" ( OwlElement()
	    | RdfElement()
		| DiscardedElement()
	    ))
	| SimpleElement()
}

void DiscardedElement() #DiscardedElement : {}
{
	Identifier() AttributeList() 
	(">" ElementList() "</" <IDENTIFIER> ">" | ElementList() "/>")
}

void Identifier() #Identifier : {Token t;}
{
	t = <IDENTIFIER>
	{jjtThis.setIDENTIFIER(t.image);}
}

void SimpleElement() : {}
{
    IntElement()
	| FloatElement()
	| StringElement()
}

void IntElement() #IntElement : { Token t; }
{
    t = <INTEGER_LITERAL>
	{jjtThis.setINTEGER_LITERAL(t.image);}
}
void FloatElement() #FloatElement : { Token t; }
{
    t = <FLOAT_LITERAL>
	{jjtThis.setFLOAT_LITERAL(t.image);}
}

void StringElement() #StringElement : { Token t; }
{
    t = <IDENTIFIER> | t = <COMMA> | t = <MINUS> | t = <DOT> | t = <PLUS> | t = <SLASH>
		| t = <COLON>
	{jjtThis.setIDENTIFIER(t.image);}
}

void OwlElement() : {}
{
    OwlOntology()
	| OwlAllDifferent()
	| OwlAllValuesFrom()
	| OwlCardinality()
	| OwlClass()
	| OwlDataRange()
	| OwlDatatypeProperty()
	| OwlDisjointWith()
	| OwlDistinctMembers()
	| OwlEquivalentClass()
	| OwlFunctionalProperty()
	| OwlImports()
	| OwlIntersectionOf()
	| OwlInverseOf()
	| OwlMinCardinality()
	| OwlObjectProperty()
	| OwlOneOf()
	| OwlOnProperty()
	| OwlSomeValuesFrom()
	| OwlRestriction()
	| OwlUnionOf()
}

void OwlOntology() #OwlOntology : {}
{
    <OWL_ONTOLOGY> AttributeList() 
	(">" ElementList() "</" <OWL_ONTOLOGY> ">" | ElementList() "/>")
}

void OwlAllDifferent() #OwlAllDifferent : {}
{
    <OWL_ALLDIFFERENT> AttributeList() 
	(">" ElementList() "</" <OWL_ALLDIFFERENT> ">" | ElementList() "/>")
}

void OwlAllValuesFrom() #OwlAllValuesFrom : {}
{
    <OWL_ALLVALUESFROM> AttributeList() 
	(">" ElementList() "</" <OWL_ALLVALUESFROM> ">" | ElementList() "/>")
}

void OwlCardinality() #OwlCardinality : {}
{
    <OWL_CARDINALITY> AttributeList() 
	(">" ElementList() "</" <OWL_CARDINALITY> ">" | ElementList() "/>")
}

void OwlClass() #OwlClass : {}
{
    <OWL_CLASS> AttributeList() 
	(">" ElementList() "</" <OWL_CLASS> ">" | ElementList() "/>")
}

void OwlDataRange() #OwlDataRange : {}
{
    <OWL_DATARANGE> AttributeList() 
	(">" ElementList() "</" <OWL_DATARANGE> ">" | ElementList() "/>")
}

void OwlDatatypeProperty() #OwlDatatypeProperty : {}
{
    <OWL_DATATYPEPROPERTY> AttributeList() 
	(">" ElementList() "</" <OWL_DATATYPEPROPERTY> ">" | ElementList() "/>")
}

void OwlDisjointWith() #OwlDisjointWith : {}
{
    <OWL_DISJOINTWITH> AttributeList() 
	(">" ElementList() "</" <OWL_DISJOINTWITH> ">" | ElementList() "/>")
}

void OwlDistinctMembers() #OwlDistinctMembers : {}
{
    <OWL_DISTINCTMEMBERS> AttributeList() 
	(">" ElementList() "</" <OWL_DISTINCTMEMBERS> ">" | ElementList() "/>")
}

void OwlEquivalentClass() #OwlEquivalentClass : {}
{
    <OWL_EQUIVALENTCLASS> AttributeList() 
	(">" ElementList() "</" <OWL_EQUIVALENTCLASS> ">" | ElementList() "/>")
}

void OwlFunctionalProperty() #OwlFunctionalProperty : {}
{
    <OWL_FUNCTIONALPROPERTY> AttributeList() 
	(">" ElementList() "</" <OWL_FUNCTIONALPROPERTY> ">" | ElementList() "/>")
}

void OwlImports () #OwlImports  : {}
{
    <OWL_IMPORTS> AttributeList() 
	(">" ElementList() "</" <OWL_IMPORTS> ">" | ElementList() "/>")
}

void OwlIntersectionOf () #OwlIntersectionOf  : {}
{
    <OWL_INTERSECTIONOF> AttributeList() 
	(">" ElementList() "</" <OWL_INTERSECTIONOF> ">" | ElementList() "/>")
}

void OwlInverseOf () #OwlInverseOf  : {}
{
    <OWL_INVERSEOF> AttributeList() 
	(">" ElementList() "</" <OWL_INVERSEOF> ">" | ElementList() "/>")
}

void OwlMinCardinality () #OwlMinCardinality  : {}
{
    <OWL_MINCARDINALITY> AttributeList() 
	(">" ElementList() "</" <OWL_MINCARDINALITY> ">" | ElementList() "/>")
}

void OwlObjectProperty () #OwlObjectProperty  : {}
{
    <OWL_OBJECTPROPERTY> AttributeList() 
	(">" ElementList() "</" <OWL_OBJECTPROPERTY> ">" | ElementList() "/>")
}

void OwlOneOf () #OwlOneOf  : {}
{
    <OWL_ONEOF> AttributeList() 
	(">" ElementList() "</" <OWL_ONEOF> ">" | ElementList() "/>")
}
void OwlOnProperty () #OwlOnProperty  : {}
{
    <OWL_ONPROPERTY> AttributeList() 
	(">" ElementList() "</" <OWL_ONPROPERTY> ">" | ElementList() "/>")
}

void OwlSomeValuesFrom () #OwlSomeValuesFrom  : {}
{
    <OWL_SOMEVALUESFROM> AttributeList() 
	(">" ElementList() "</" <OWL_SOMEVALUESFROM> ">" | ElementList() "/>")
}

void OwlRestriction () #OwlRestriction  : {}
{
    <OWL_RESTRICTION> AttributeList() 
	(">" ElementList() "</" <OWL_RESTRICTION> ">" | ElementList() "/>")
}

void OwlUnionOf () #OwlUnionOf  : {}
{
    <OWL_UNIONOF> AttributeList() 
	(">" ElementList() "</" <OWL_UNIONOF> ">" | ElementList() "/>")
}

void RdfElement() : {}
{
    RdfType()
	| RdfFirst()
	| RdfRest()
	| RdfsComment()
	| RdfsDomain()
	| RdfsRange()
	| RdfsSubClassOf()
	| RdfsSubPropertyOf()
}

void RdfType() #RdfType : {}
{
    <RDF_TYPE> AttributeList() 
	(">" ElementList() "</" <RDF_TYPE> ">" | ElementList() "/>")
}

void RdfFirst() #RdfFirst : {}
{
    <RDF_FIRST> AttributeList() 
	(">" ElementList() "</" <RDF_FIRST> ">" | ElementList() "/>")
}

void RdfRest() #RdfRest : {}
{
    <RDF_REST> AttributeList() 
	(">" ElementList() "</" <RDF_REST> ">" | ElementList() "/>")
}

void RdfsComment() #RdfsComment : {}
{
    <RDFS_COMMENT> AttributeList() 
	(">" ElementList() "</" <RDFS_COMMENT> ">" | ElementList() "/>")
}

void RdfsDomain() #RdfsDomain : {}
{
    <RDFS_DOMAIN> AttributeList() 
	(">" ElementList() "</" <RDFS_DOMAIN> ">" | ElementList() "/>")
}

void RdfsRange() #RdfsRange : {}
{
    <RDFS_RANGE> AttributeList() 
	(">" ElementList() "</" <RDFS_RANGE> ">" | ElementList() "/>")
}

void RdfsSubClassOf() #RdfsSubClassOf : {}
{
    <RDFS_SUBCLASSOF> AttributeList() 
	(">" ElementList() "</" <RDFS_SUBCLASSOF> ">" | ElementList() "/>")
}

void RdfsSubPropertyOf() #RdfsSubPropertyOf : {}
{
    <RDFS_SUBPROPERTYOF> AttributeList() 
	(">" ElementList() "</" <RDFS_SUBPROPERTYOF> ">" | ElementList() "/>")
}

void AttributeList() #List : {}
{
    (Attribute())*
}

void Attribute() : {}
{
    Version()
	| RdfAttribute()
	| XmlAttribute()
	| XmlnsAttribute()
}

void Version() #Version : {}
{
    <VERSION> <ASSIGN> Value()
}

void RdfAttribute() : {}
{
    RdfAbout()
	| RdfDatatype()
	| RdfId()
	| RdfParseType()
	| RdfResource()
}

void RdfAbout() #RdfAbout : {}
{
    <RDF_ABOUT> <ASSIGN> Value()
}

void RdfDatatype() #RdfDatatype : {}
{
    <RDF_DATATYPE> <ASSIGN> Value()
}

void RdfId() #RdfId : {}
{
    <RDF_ID> <ASSIGN> Value()
}

void RdfParseType() #RdfParseType : {}
{
    <RDF_PARSETYPE> <ASSIGN> Value()
}

void RdfResource() #RdfResource : {}
{
    <RDF_RESOURCE> <ASSIGN> Value()
}

void XmlAttribute() : {}
{
    XmlBase()
}

void XmlBase() #XmlBase : {}
{
    <XML_BASE> <ASSIGN> Value()
}

void XmlnsAttribute() : {}
{
    Xmlns()
	| XmlnsDaml()
	| XmlnsDc()
	| XmlnsOwl()
	| XmlnsP1()
	| XmlnsProtege()
	| XmlnsRdf()
	| XmlnsRdfs()
	| XmlnsXsd()
}

void Xmlns() #Xmlns : {}
{
    <XMLNS> <ASSIGN> Value()
}

void XmlnsDaml() #XmlnsDaml : {}
{
    <XMLNS_DAML> <ASSIGN> Value()
}

void XmlnsDc() #XmlnsDc : {}
{
    <XMLNS_DC> <ASSIGN> Value()
}

void XmlnsP1() #XmlnsP1 : {}
{
    <XMLNS_P1> <ASSIGN> Value()
}

void XmlnsProtege() #XmlnsProtege : {}
{
    <XMLNS_PROTEGE> <ASSIGN> Value()
}

void XmlnsRdf() #XmlnsRdf : {}
{
    <XMLNS_RDF> <ASSIGN> Value()
}

void XmlnsXsd() #XmlnsXsd : {}
{
    <XMLNS_XSD> <ASSIGN> Value()
}

void XmlnsRdfs() #XmlnsRdfs : {}
{
    <XMLNS_RDFS> <ASSIGN> Value()
}

void XmlnsOwl() #XmlnsOwl : {}
{
    <XMLNS_OWL> <ASSIGN> Value()
}

void Value() #Value : { Token t; }
{
    t = <STRING_LITERAL>
	{jjtThis.setSTRING_LITERAL(t.image);}
}