-
Anders Nilsson authoredAnders Nilsson authored
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);}
}