/* -*-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 */ { < XS_ANNOTATION : "xs:annotation" > | < XS_APPINFO : "xs:appinfo" > | < XS_DOCUMENTATION : "xs:documentation" > | < XS_INCLUDE : "xs:include" > | < XS_RESTRICTION : "xs:restriction" > | < XS_SCHEMA : "xs:schema" > | < XS_SIMPLETYPE : "xs:simpleType" > | < ATTRIBUTEFORMDEFAULT : "attributeFormDefault" > | < BASE : "base" > | < ELEMENTFORMDEFAULT : "elementFormDefault" > | < ENCODING : "encoding" > | < SCHEMALOCATION : "schemaLocation" > | < SOURCE : "source" > | < VERSION : "version" > | < XML : "xml" > | < XMLNS_XS : "xmlns:xs" > }// 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 : ">" > | < END_TAG : "</" > | < 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() XsSchema() } void XmlHeader() #XmlHeader : {} { "<?" <XML> AttributeList() "?>" } void XsSchema() #XsSchema : {} { "<" <XS_SCHEMA> AttributeList() ">" ElementList() "</" <XS_SCHEMA> ">" } void ElementList() #List : {} { (Element())* } void Element() : {} { ( "<" (XsAnnotation() | XsAppinfo() | XsDocumentation() | XsInclude() | XsRestriction() | XsSimpleType() )) | SimpleElement() } void XsAnnotation() #XsAnnotation : {} { <XS_ANNOTATION> AttributeList() (">" ElementList() "</" <XS_ANNOTATION> ">" | ElementList() "/>") } void XsAppinfo() #XsAppinfo : {} { <XS_APPINFO> AttributeList() (">" ElementList() "</" <XS_APPINFO> ">" | ElementList() "/>") } void XsDocumentation() #XsDocumentation : {} { <XS_DOCUMENTATION> AttributeList() (">" ElementList() "</" <XS_DOCUMENTATION> ">" | ElementList() "/>") } void XsInclude() #XsInclude : {} { <XS_INCLUDE> AttributeList() (">" ElementList() "</" <XS_INCLUDE> ">" | ElementList() "/>") } void XsRestriction() #XsRestriction : {} { <XS_RESTRICTION> AttributeList() (">" ElementList() "</" <XS_RESTRICTION> ">" | ElementList() "/>") } void XsSimpleType() #XsSimpleType : {} { <XS_SIMPLETYPE> AttributeList() (">" ElementList() "</" <XS_SIMPLETYPE> ">" | ElementList() "/>") } 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;String s; } { // t = <IDENTIFIER> | t = <COMMA> | t = <MINUS> | t = <DOT> | t = <PLUS> | t = <SLASH> // | t = <COLON> t = <IDENTIFIER> { s = t.image; if (getToken(1).kind != LT ) { getData(s); } } {jjtThis.setIDENTIFIER(t.image);} } JAVACODE void getData(String s) { // jjtThis.someData = true; while ((getToken(1)).kind != END_TAG) s += getNextToken().image; } void AttributeList() #List : {} { (Attribute())* } void Attribute() : {} { Version() | AttributeFormDefault() | Base() | ElementFormDefault() | Encoding() | Source() | SchemaLocation() | XmlnsXs() } void AttributeFormDefault() #AttributeFormDefault : {} { <ATTRIBUTEFORMDEFAULT> <ASSIGN> Value() } void Base() #Base : {} { <BASE> <ASSIGN> Value() } void ElementFormDefault() #ElementFormDefault : {} { <ELEMENTFORMDEFAULT> <ASSIGN> Value() } void Encoding() #Encoding : {} { <ENCODING> <ASSIGN> Value() } void Source() #Source : {} { <SOURCE> <ASSIGN> Value() } void SchemaLocation() #SchemaLocation : {} { <SCHEMALOCATION> <ASSIGN> Value() } void Version() #Version : {} { <VERSION> <ASSIGN> Value() } void XmlnsXs() #XmlnsXs : {} { <XMLNS_XS> <ASSIGN> Value() } void Value() #Value : { Token t; } { t = <STRING_LITERAL> {jjtThis.setSTRING_LITERAL(t.image);} }