| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537 |
- %{
- //
- // XQueryParser.jay
- //
- // Author:
- // Atsushi Enomoto <[email protected]>
- //
- // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
- //
- // Permission is hereby granted, free of charge, to any person obtaining
- // a copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to
- // permit persons to whom the Software is furnished to do so, subject to
- // the following conditions:
- //
- // The above copyright notice and this permission notice shall be
- // included in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- //
- //
- // FIXME:
- // attribute value template
- // handle double literal
- //
- #if NET_2_0
- using System;
- using System.Collections;
- using System.IO;
- using System.Xml;
- using System.Xml.Query;
- using System.Xml.Schema;
- using System.Xml.XPath;
- using System.Security.Policy;
- using Mono.Xml.XPath2;
- using Mono.Xml.XQuery;
- namespace Mono.Xml.XQuery.Parser
- {
- internal class XQueryParser
- {
- // FIXME: Wait for recommendation
- public const string XdtNamespace = "http://www.w3.org/2003/11/xpath-datatypes";
- // See also FunctionCall production rule.
- static Hashtable reservedFunctionNames;
- static XQueryParser ()
- {
- reservedFunctionNames = new Hashtable ();
- reservedFunctionNames.Add ("attribute", "attribute");
- reservedFunctionNames.Add ("comment", "comment");
- reservedFunctionNames.Add ("document", "document");
- reservedFunctionNames.Add ("element", "element");
- reservedFunctionNames.Add ("empty", "empty");
- reservedFunctionNames.Add ("if", "if");
- reservedFunctionNames.Add ("item", "item");
- reservedFunctionNames.Add ("node", "node");
- reservedFunctionNames.Add ("processing-instruction", "processing-instruction");
- reservedFunctionNames.Add ("text", "text");
- reservedFunctionNames.Add ("type", "type");
- reservedFunctionNames.Add ("typeswitch", "typeswitch");
- }
- public static XQueryModule Parse (TextReader reader)
- {
- return new XQueryParser ().RunParse (reader);
- }
- private XQueryTokenizer tokenizer;
- private XQueryParser ()
- {
- }
- // FIXME: we don't need Evidence here at all. It is used only
- // to generate runnable IL (on loading resulting Assembly).
- public XQueryModule RunParse (TextReader source)
- {
- tokenizer = null;
- try {
- // debug = new yydebug.yyDebugSimple ();
- tokenizer = new XQueryTokenizer (source);
- XQueryModule mod = (XQueryModule) yyparse (tokenizer);
- mod.NSResolver = tokenizer.NSResolver;
- return mod;
- } catch (yyParser.yyException ex) {
- throw new XmlQueryCompileException (String.Format ("Tokenizer error at line {0}, column {1}: {2}", tokenizer.LineNumber, tokenizer.LinePosition, ex.Message), ex);
- }
- }
- public XmlTypeCode GetAtomicTypeCode (XmlQualifiedName name)
- {
- if (name.Namespace == XdtNamespace) {
- switch (name.Name) {
- case "anyAtomicType":
- return XmlTypeCode.AnyAtomicType;
- case "dayTimeDuration":
- return XmlTypeCode.DayTimeDuration;
- case "item":
- return XmlTypeCode.Item;
- case "untypedAtomic":
- return XmlTypeCode.UntypedAtomic;
- case "yearMonthDuration":
- return XmlTypeCode.YearMonthDuration;
- }
- } else if (name.Namespace == XmlSchema.Namespace) {
- switch (name.Name) {
- case "boolean":
- return XmlTypeCode.Boolean;
- case "byte":
- return XmlTypeCode.Byte;
- case "date":
- return XmlTypeCode.Date;
- case "dateTime":
- return XmlTypeCode.DateTime;
- case "decimal":
- return XmlTypeCode.Decimal;
- case "double":
- return XmlTypeCode.Double;
- case "duration":
- return XmlTypeCode.Duration;
- case "entity":
- return XmlTypeCode.Entity;
- case "float":
- return XmlTypeCode.Float;
- case "gDay":
- return XmlTypeCode.GDay;
- case "gMonth":
- return XmlTypeCode.GMonth;
- case "gMonthDay":
- return XmlTypeCode.GMonthDay;
- case "gYear":
- return XmlTypeCode.GYear;
- case "gYearMonth":
- return XmlTypeCode.GYearMonth;
- case "hexBinary":
- return XmlTypeCode.HexBinary;
- case "id":
- return XmlTypeCode.Id;
- case "idref":
- return XmlTypeCode.Idref;
- case "int":
- return XmlTypeCode.Int;
- case "integer":
- return XmlTypeCode.Integer;
- case "language":
- return XmlTypeCode.Language;
- case "long":
- return XmlTypeCode.Long;
- case "Name":
- return XmlTypeCode.Name;
- case "NCName":
- return XmlTypeCode.NCName;
- case "negativeInteger":
- return XmlTypeCode.NegativeInteger;
- case "NMTOKEN":
- return XmlTypeCode.NmToken;
- case "nonNegativeInteger":
- return XmlTypeCode.NonNegativeInteger;
- case "nonPositiveInteger":
- return XmlTypeCode.NonPositiveInteger;
- case "normalizedString":
- return XmlTypeCode.NormalizedString;
- case "NOTATION":
- return XmlTypeCode.Notation;
- case "positiveInteger":
- return XmlTypeCode.PositiveInteger;
- case "QName":
- return XmlTypeCode.QName;
- case "short":
- return XmlTypeCode.Short;
- case "string":
- return XmlTypeCode.String;
- case "time":
- return XmlTypeCode.Time;
- case "token":
- return XmlTypeCode.Token;
- case "unsignedByte":
- return XmlTypeCode.UnsignedByte;
- case "unsignedInt":
- return XmlTypeCode.UnsignedInt;
- case "unsignedLong":
- return XmlTypeCode.UnsignedLong;
- case "unsignedShort":
- return XmlTypeCode.UnsignedShort;
- }
- }
- throw new XmlQueryCompileException (String.Format ("Unexpected type name was specified as atomic type: {0}", name));
- }
- %}
- /* --------------------------------------------------------
- Tokens
- -------------------------------------------------------- */
- /* These are for numbers */
- //%token SMALL_E //"e"
- //%token LARGE_E //"E"
- %token DOT "."
- %token DOT2 ".."
- %token SEMICOLON ";"
- %token OPEN_PAREN "("
- %token OPEN_PAREN_COLON "(:"
- %token PRAGMA_OPEN "(::"
- %token CLOSE_PAREN ")"
- %token COLON ":"
- %token COLON2 "::"
- %token PRAGMA_CLOSE "::)"
- %token CLOSE_PAREN_COLON ":)"
- %token COLON_EQUAL ":="
- %token OPEN_BRACKET "["
- %token CLOSE_BRACKET "]"
- %token OPEN_CURLY "{"
- %token CLOSE_CURLY "}"
- %token COMMA ","
- %token DOLLAR "$"
- %token EQUAL "="
- %token NOT_EQUAL "!="
- %token LESSER "<"
- %token LESSER2 "<<"
- %token LESSER_EQUAL "<="
- %token GREATER ">"
- %token GREATER2 ">>"
- %token GREATER_EQUAL ">="
- %token BAR "|"
- %token ASTERISK "*"
- %token PLUS "+"
- %token MINUS "-"
- %token SLASH "/"
- %token SLASH2 "//"
- %token QUESTION "?"
- %token XQUERY //"xquery"
- %token VERSION //"version"
- %token PRAGMA //"pragma"
- %token EXTENSION //"extension"
- %token MODULE //"module"
- %token NAMESPACE //"namespace"
- %token DECLARE //"declare"
- %token XMLSPACE //"xmlspace"
- %token PRESERVE //"preserve"
- %token STRIP //"strip"
- %token DEFAULT //"default"
- %token DOCUMENT_NODE //"document-node"
- %token DOCUMENT //"document"
- %token ELEMENT //"element"
- %token ATTRIBUTE //"attribute"
- %token PROCESSING_INSTRUCTION //"processing-instruction"
- %token COMMENT //"comment"
- %token TEXT //"text"
- %token NODE //"node"
- %token FUNCTION //"function"
- %token COLLATION //"collation"
- %token CONSTRUCTION //"construction"
- %token ORDERING //"ordering"
- %token ORDERED //"ordered"
- %token UNORDERED //"unordered"
- %token BASEURI //"base-uri"
- %token IMPORT //"import"
- %token SCHEMA //"schema"
- %token AT //"at"
- %token VARIABLE //"variable"
- %token AS //"as"
- %token EXTERNAL //"external"
- %token VALIDATION //"validation"
- %token LAX //"lax"
- %token STRICT //"strict"
- %token SKIP //"skip"
- %token RETURN //"return"
- %token FOR //"for"
- %token LET //"let"
- %token IN //"in"
- %token WHERE //"where"
- %token ORDER //"order"
- %token BY //"by"
- %token STABLE //"stable"
- %token ASCENDING //"ascending"
- %token DESCENDING //"descending"
- %token EMPTY //"empty"
- %token GREATEST //"greatest"
- %token LEAST //"least"
- %token SOME //"some"
- %token EVERY //"every"
- %token SATISFIES //"satisfies"
- %token IS //"is"
- %token TO //"to"
- %token EQ //"eq"
- %token NE //"ne"
- %token LT //"lt"
- %token LE //"le"
- %token GT //"gt"
- %token GE //"ge"
- %token AND //"and"
- %token OR //"or"
- %token INSTANCE //"instance"
- %token OF //"of"
- %token IF //"if"
- %token THEN //"then"
- %token ELSE //"else"
- %token TYPESWITCH //"typeswitch"
- %token CASE //"case"
- %token TREAT //"treat"
- %token CASTABLE //"castable"
- %token CAST //"as"
- %token DIV //"div"
- %token IDIV //"idiv"
- %token MOD //"mod"
- %token UNION //"union"
- %token INTERSECT //"intersect"
- %token EXCEPT //"except"
- %token VALIDATE //"validate"
- %token CONTEXT //"context"
- %token NILLABLE //"nillable"
- %token ITEM //"item"
- %token GLOBAL //"global"
- %token TYPE //"type"
- %token CHILD //"child"
- %token DESCENDANT //"descendant"
- %token ATTRIBUTE //"attribute"
- %token SELF //"self"
- %token DESCENDANT_OR_SELF //"descendant-or-self"
- %token FOLLOWING_SIBLING //"following-sibling"
- %token FOLLOWING //"following"
- %token PARENT //"parent"
- %token ANCESTOR //"ancestor"
- %token PRECEDING_SIBLING //"preceding-sibling"
- %token PRECEDING //"preceding"
- %token ANCESTOR_OR_SELF //"ancestor-or-self"
- %token QNAME
- %token NCNAME
- %token WILD_LOCALNAME
- %token WILD_PREFIX
- %token STRING_LITERAL
- %token DECIMAL_LITERAL
- %token DOUBLE_LITERAL
- %token PRAGMA_CONTENTS // characters until "::)"
- %token PREDEFINED_ENTITY_REF
- %token CHAR_REF
- // Used only inside Constructor
- %token XML_COMMENT_START // "<!--"
- %token XML_COMMENT_TO_END // XML comment content immediate before "-->"
- %token XML_PI_START // "<?"
- %token XML_PI_TO_END // PI content immediate before "?>"
- %token XML_CDATA_START // <![CDATA[
- %token XML_CDATA_TO_END // CDATA section content immediate before "]]>"
- %token EMPTY_TAG_CLOSE // "/>"
- %token END_TAG_START // "</". Its appearance depends on the context
- %token ATT_VALUE_LITERAL
- %token ELEM_CONTENT_LITERAL
- %token EXT_CONTENT
- %token APOS "'"
- //%token APOS2 "''"
- %token QUOT //""""
- //%token QUOT2 //""""""
- %start Module
- %%
- /* --------------------------------------------------------
- Modules and Prologs
- -------------------------------------------------------- */
- Module // returns Module
- : VersionDecl MainModule
- {
- string version = (string) $1;
- XQueryMainModule module = (XQueryMainModule) $2;
- module.Version = version;
- $$ = module;
- }
- | VersionDecl LibraryModule
- {
- string version = (string) $1;
- XQueryLibraryModule module = (XQueryLibraryModule) $2;
- $$ = module;
- }
- ;
- VersionDecl // returns string
- : // empty
- {
- $$ = null;
- }
- | XQUERY VERSION STRING_LITERAL {
- tokenizer.State = ParseState.Operator;
- } SEMICOLON {
- tokenizer.State = ParseState.Default;
- }
- {
- $$ = (string) $3;
- }
- ;
- MainModule // returns MainModule
- : Prolog QueryBody
- {
- Prolog prolog = (Prolog) $1;
- ExprSequence body = (ExprSequence) $2;
- XQueryMainModule mod = new XQueryMainModule ();
- mod.Prolog = prolog;
- mod.QueryBody = body;
- $$ = mod;
- }
- ;
- LibraryModule // returns LibraryModule
- : ModuleDecl Prolog
- {
- XQueryLibraryModule mod = new XQueryLibraryModule ();
- mod.ModuleDecl = (ModuleDecl) $1;
- mod.Prolog = (Prolog) $2;
- $$ = mod;
- }
- ;
- ModuleDecl // returns ModuleDecl
- : MODULE NAMESPACE {
- tokenizer.State = ParseState.NamespaceDecl;
- } NCName EQUAL STRING_LITERAL {
- tokenizer.State = ParseState.Default;
- } SEMICOLON
- {
- ModuleDecl decl = new ModuleDecl ();
- decl.Prefix = (string) $4;
- decl.Namespace = (string) $6;
- tokenizer.AddNamespace (decl.Prefix, decl.Namespace);
- $$ = decl;
- }
- ;
- Prolog
- : // empty
- {
- $$ = new Prolog ();
- }
- | PrologContent SEMICOLON Prolog
- {
- Prolog p = (Prolog) $3;
- p.Add ($1);
- $$ = p;
- }
- ;
- PrologContent
- : Setter
- | DeclarationOrImport
- ;
- // FIXME: this production rule is the right one, but it brings
- // major shift/reduce conflicts.
- /*
- Prolog // returns Prolog
- : Setters DeclarationsAndImports
- {
- Prolog p = (Prolog) $1;
- ArrayList al = (ArrayList) $2;
- if (al != null) {
- foreach (object o in al)
- p.Add (o);
- }
- $$ = p;
- }
- ;
- Setters // returns Prolog
- : // empty
- {
- $$ = new Prolog ();
- }
- | Setter SEMICOLON Setters
- {
- Prolog p = (Prolog) $3;
- p.Add ($1);
- $$ = p;
- }
- ;
- DeclarationsAndImports // returns ArrayList
- : // empty
- {
- $$ = null;
- }
- | DeclarationOrImport SEMICOLON DeclarationsAndImports
- {
- ArrayList al = (ArrayList) $3;
- if (al == null)
- al = new ArrayList ();
- al.Add ($1);
- $$ = al;
- }
- ;
- */
- Setter // returns object
- : XmlSpaceDecl // XmlSpaceDecl
- | DefaultCollationDecl // SimplePrologContent
- | BaseURIDecl // SimplePrologContent
- | ConstructionDecl // ConstuctionDecl
- | DefaultNamespaceDecl // SimplePrologContent
- | DefaultOrderingDecl // bool
- ;
- DeclarationOrImport // returns object
- : SchemaImport
- | ModuleImport
- | NamespaceDecl
- | VarDecl
- | FunctionDecl
- ;
- NamespaceDecl // returns XmlQualifiedName
- : DECLARE NAMESPACE {
- tokenizer.State = ParseState.NamespaceDecl;
- } NCName EQUAL STRING_LITERAL {
- tokenizer.State = ParseState.Default;
- }
- {
- XmlQualifiedName name = new XmlQualifiedName ((string) $4, (string) $6);
- tokenizer.AddNamespace (name.Name, name.Namespace);
- $$ = name;
- }
- ;
- XmlSpaceDecl // returns XmlSpaceDecl
- : DECLARE XMLSPACE {
- tokenizer.State = ParseState.XmlSpaceDecl;
- } PRESERVE {
- tokenizer.State = ParseState.Default;
- }
- {
- $$ = new XmlSpaceDecl (XmlSpace.Preserve);
- }
- | DECLARE XMLSPACE {
- tokenizer.State = ParseState.XmlSpaceDecl;
- } STRIP {
- tokenizer.State = ParseState.Default;
- }
- {
- $$ = new XmlSpaceDecl (XmlSpace.Default);
- }
- ;
- ConstructionDecl // returns ConstructionDecl
- : DECLARE CONSTRUCTION {
- tokenizer.State = ParseState.Operator;
- } PRESERVE {
- tokenizer.State = ParseState.Default;
- }
- {
- $$ = new ConstructionDecl (XmlSpace.Preserve);
- }
- | DECLARE CONSTRUCTION {
- tokenizer.State = ParseState.Operator;
- } STRIP {
- tokenizer.State = ParseState.Default;
- }
- {
- $$ = new ConstructionDecl (XmlSpace.Default);
- }
- ;
- DefaultNamespaceDecl // returns SimplePrologContent
- : DECLARE DEFAULT ELEMENT {
- tokenizer.State = ParseState.NamespaceKeyword;
- } NAMESPACE {
- tokenizer.State = ParseState.NamespaceDecl;
- } STRING_LITERAL {
- tokenizer.State = ParseState.Default;
- }
- {
- tokenizer.AddNamespace (String.Empty, (string) $7);
- $$ = new SimplePrologContent (PrologContentType.DefaultElementNamespace, (string) $7);
- }
- | DECLARE DEFAULT FUNCTION {
- tokenizer.State = ParseState.NamespaceKeyword;
- } NAMESPACE {
- tokenizer.State = ParseState.NamespaceDecl;
- } STRING_LITERAL {
- tokenizer.State = ParseState.Default;
- }
- {
- tokenizer.DefaultFunctionNamespace = (string) $5;
- $$ = new SimplePrologContent (PrologContentType.DefaultFunctionNamespace, (string) $5);
- }
- ;
- DefaultCollationDecl // returns SimplePrologContent
- : DECLARE DEFAULT COLLATION {
- tokenizer.State = ParseState.NamespaceDecl;
- } STRING_LITERAL {
- tokenizer.State = ParseState.Default;
- }
- {
- $$ = new SimplePrologContent (PrologContentType.DefaultCollation, (string) $4);
- }
- ;
- DefaultOrderingDecl // returns bool
- : DECLARE DEFAULT ORDERING {
- tokenizer.State = ParseState.Operator;
- } ORDERED {
- tokenizer.State = ParseState.Default;
- }
- {
- $$ = true;
- }
- | DECLARE DEFAULT ORDERING {
- tokenizer.State = ParseState.Operator;
- } UNORDERED {
- tokenizer.State = ParseState.Default;
- }
- {
- $$ = false;
- }
- ;
- BaseURIDecl // returns SimplePrologContent
- : DECLARE BASEURI {
- tokenizer.State = ParseState.NamespaceDecl;
- } STRING_LITERAL {
- tokenizer.State = ParseState.Default;
- }
- {
- $$ = new SimplePrologContent (PrologContentType.BaseUri, (string) $3);
- }
- ;
- SchemaImport // returns SchemaImport
- : IMPORT SCHEMA {
- tokenizer.State = ParseState.NamespaceKeyword;
- } OptionalSchemaPrefix STRING_LITERAL {
- tokenizer.State = ParseState.Default;
- } OptionalLocations
- {
- if ($4 != null)
- tokenizer.AddNamespace ((string) $4, (string) $5);
- $$ = new SchemaImport ((string) $4, (string) $5, (ICollection) $7);
- }
- ;
- OptionalSchemaPrefix // returns string or null
- : // empty
- {
- $$ = null;
- }
- | SchemaPrefix
- ;
- SchemaPrefix // returns string
- : NAMESPACE {
- tokenizer.State = ParseState.NamespaceDecl;
- } NCName EQUAL {
- }
- {
- $$ = (string) $3;
- }
- | DEFAULT ELEMENT NAMESPACE {
- tokenizer.State = ParseState.NamespaceDecl;
- }
- {
- $$ = "";
- }
- ;
- ModuleImport // returns ModuleImport
- : IMPORT MODULE {
- tokenizer.State = ParseState.NamespaceKeyword;
- } OptionalModuleNamespace STRING_LITERAL {
- tokenizer.State = ParseState.Default;
- } OptionalLocations
- {
- $$ = new ModuleImport ((string) $4, (string) $5, (ICollection) $7);
- tokenizer.AddNamespace ((string) $4, (string) $5);
- }
- ;
- OptionalModuleNamespace // returns string
- : // empty
- {
- $$ = String.Empty;
- }
- | NAMESPACE {
- tokenizer.State = ParseState.NamespaceDecl;
- } NCName EQUAL
- {
- $$ = (string) $3;
- }
- ;
- OptionalLocations // returns ArrayList or null
- : // empty
- {
- $$ = null;
- }
- | AT STRING_LITERAL AdditionalLocations
- {
- ArrayList al = (ArrayList) $3;
- if (al != null)
- al = new ArrayList ();
- al.Add ((string) $2);
- $$ = al;
- }
- ;
- AdditionalLocations // returns ArrayList or null
- : // empty
- {
- $$ = null;
- }
- | COMMA STRING_LITERAL AdditionalLocations
- {
- ArrayList al = (ArrayList) $3;
- if (al == null)
- al = new ArrayList ();
- al.Add ((string) $2);
- $$ = al;
- }
- ;
- VarDecl // returns VariableDeclaration
- : DECLARE VARIABLE DOLLAR {
- tokenizer.PushState (ParseState.Default);
- tokenizer.State = ParseState.VarName;
- } VarName {
- tokenizer.State = ParseState.Operator;
- } OptionalTypeDeclaration VarDeclBody
- {
- $$ = new XQueryVariable ((XmlQualifiedName) $4, (SequenceType) $5, (ExprSequence) $6);
- }
- ;
- VarDeclBody // returns ExprSequence or null
- : OPEN_CURLY {
- tokenizer.State = ParseState.Default;
- } Expr CloseCurly
- {
- $$ = $2;
- }
- | EXTERNAL {
- // LAMESPEC: This state transition is not described in XQuery 1.0 spec
- tokenizer.PopState ();
- }
- {
- $$ = null;
- }
- ;
- VarName // returns XmlQualifiedName
- : QName {
- tokenizer.State = ParseState.Operator;
- }
- {
- $$ = $1;
- }
- ;
- OptionalTypeDeclaration // returns SequenceType or null
- : // empty
- {
- $$ = null;
- }
- | TypeDeclaration
- ;
- TypeDeclaration // returns SequenceType
- : AS { // Note that this transition applies only at Operator state.
- tokenizer.State = ParseState.ItemType;
- } SequenceType
- {
- $$ = $2;
- }
- ;
- FunctionDecl // returns FunctionDeclaration
- : DECLARE FUNCTION {
- tokenizer.PushState (ParseState.Default);
- tokenizer.State = ParseState.Default;
- } QName OPEN_PAREN OptionalParamList CLOSE_PAREN {
- tokenizer.State = ParseState.Operator;
- } OptionalTypeDeclaration FunctionBody
- {
- $$ = new FunctionDeclaration (
- (XmlQualifiedName) $4,
- (XQueryFunctionArgumentList) $6,
- (SequenceType) $9,
- (EnclosedExpr) $10);
- }
- ;
- FunctionBody // returns EnclosedExpr or null
- : EnclosedExpr
- | EXTERNAL
- {
- $$ = null;
- }
- ;
- SequenceType // returns SequenceType
- : ItemType OptionalOccurenceIndicator
- {
- $$ = new SequenceType ((ItemType) $1, (Occurence) $2);
- }
- | EMPTY OPEN_PAREN CLOSE_PAREN {
- tokenizer.State = ParseState.Operator;
- }
- {
- $$ = SequenceType.Create (XmlTypeCode.None, Occurence.One);
- }
- ;
- OptionalOccurenceIndicator // returns Occurence
- : // empty
- {
- $$ = Occurence.One;
- }
- | OccurenceIndicator
- ;
- OccurenceIndicator // returns Occurence
- : QUESTION
- {
- $$ = Occurence.Optional;
- }
- | ASTERISK
- {
- $$ = Occurence.ZeroOrMore;
- }
- | PLUS
- {
- $$ = Occurence.OneOrMore;
- }
- ;
- OptionalParamList // returns XQueryFunctionArgumentList
- : // empty
- {
- $$ = new XQueryFunctionArgumentList ();
- }
- | ParamList
- ;
- ParamList // returns XQueryFunctionArgumentList
- : Param
- {
- XQueryFunctionArgumentList pl = new XQueryFunctionArgumentList ();
- pl.Add ((XQueryFunctionArgument) $1);
- $$ = pl;
- }
- | Param COMMA ParamList
- {
- XQueryFunctionArgumentList pl = (XQueryFunctionArgumentList) $3;
- pl.Insert (0, (XQueryFunctionArgument) $1);
- $$ = pl;
- }
- ;
- Param // returns XQueryFunctionArgument
- : DOLLAR {
- tokenizer.State = ParseState.VarName;
- } VarName {
- tokenizer.State = ParseState.Operator;
- } OptionalTypeDeclaration
- {
- $$ = new XQueryFunctionArgument ((XmlQualifiedName) $3, (SequenceType) $5);
- }
- ;
- QueryBody
- : Expr
- ;
- /* --------------------------------------------------------
- Expressions
- -------------------------------------------------------- */
- Expr // returns ExprSequence
- : ExprSequence
- {
- ExprSequence seq = (ExprSequence) $1;
- $$ = seq;
- }
- ;
- ExprSequence // returns ExprSequence
- : ExprSingle
- {
- ExprSequence seq = new ExprSequence ();
- seq.Add ((ExprSingle) $1);
- $$ = seq;
- }
- | ExprSingle COMMA ExprSequence
- {
- ExprSequence seq = (ExprSequence) $3;
- seq.Insert (0, (ExprSingle) $1);
- $$ = seq;
- }
- ;
- ExprSingle // returns ExprSingle
- : FLWORExpr
- | QuantifiedExpr
- | TypeswitchExpr
- | IfExpr
- | OrExpr
- ;
- /* -------------------------------------
- FLWORExpr
- ------------------------------------- */
- FLWORExpr // returns FLWORExpr
- : RepeatedForLetClause OptionalWhereClause OptionalOrderByClause RETURN {
- tokenizer.State = ParseState.Default;
- } ExprSingle
- {
- ForLetClauseCollection col = (ForLetClauseCollection) $1;
- $$ = new FLWORExpr (col, (ExprSequence) $2, (OrderSpecList) $3, (ExprSingle) $6);
- }
- ;
- RepeatedForLetClause // returns ForLetClauseCollection
- : ForLetClause
- {
- ForLetClauseCollection col = new ForLetClauseCollection ();
- col.Add ((ForLetClause) $1);
- $$ = col;
- }
- | ForLetClause RepeatedForLetClause
- {
- ForLetClauseCollection col = (ForLetClauseCollection) $2;
- col.Insert (0, (ForLetClause) $1);
- $$ = col;
- }
- ;
- ForLetClause // returns ForLetClause
- : ForClause
- | LetClause
- ;
- OptionalWhereClause // returns ExprSequence or null
- : // empty
- {
- $$ = null;
- }
- | WhereClause
- ;
- OptionalOrderByClause
- : // empty
- {
- $$ = null;
- }
- | OrderByClause
- ;
- ForClause // returns ForClause
- : FOR ForBody
- {
- ForClause fc = (ForClause) $2;
- $$ = fc;
- }
- ;
- ForBody
- : ForSingleBody
- {
- ForClause fc = new ForClause ();
- fc.Add ((ForSingleBody) $1);
- $$ = fc;
- }
- | ForSingleBody COMMA ForBody
- {
- ForClause fc = (ForClause) $3;
- fc.Insert (0, (ForSingleBody) $1);
- $$ = fc;
- }
- ;
- ForSingleBody // returns ForSingleBody
- : DOLLAR {
- tokenizer.State = ParseState.VarName;
- } VarName {
- tokenizer.State = ParseState.Operator;
- } OptionalTypeDeclaration OptionalPositionalVar IN {
- tokenizer.State = ParseState.Default;
- } ExprSingle
- {
- $$ = new ForSingleBody ((XmlQualifiedName) $3, (SequenceType) $5, (XmlQualifiedName) $6, (ExprSingle) $9);
- }
- ;
- LetClause
- : LET LetBody
- {
- LetClause let = (LetClause) $2;
- $$ = let;
- }
- ;
- LetBody
- : LetSingleBody
- {
- LetClause lc = new LetClause ();
- lc.Add ((LetSingleBody) $1);
- $$ = lc;
- }
- | LetSingleBody COMMA LetBody
- {
- LetClause let = (LetClause) $3;
- let.Insert (0, (LetSingleBody) $1);
- $$ = let;
- }
- LetSingleBody
- : DOLLAR {
- tokenizer.State = ParseState.VarName;
- } VarName {
- tokenizer.State = ParseState.Operator;
- } OptionalTypeDeclaration COLON_EQUAL {
- tokenizer.State = ParseState.Default;
- } ExprSingle
- {
- $$ = new LetSingleBody ((XmlQualifiedName) $3, (SequenceType) $5, (ExprSingle) $8);
- }
- ;
- OptionalPositionalVar // returns XmlQualifiedName
- : // empty
- {
- $$ = XmlQualifiedName.Empty;
- }
- | PositionalVar
- ;
- PositionalVar
- : AT {
- tokenizer.State = ParseState.Default;
- } DOLLAR {
- tokenizer.State = ParseState.VarName;
- } VarName {
- tokenizer.State = ParseState.Operator;
- }
- {
- $$ = $5;
- }
- ;
- WhereClause // returns ExprSequence
- : WHERE {
- tokenizer.State = ParseState.Default;
- } Expr
- {
- $$ = $3;
- }
- ;
- OrderByClause // returns OrderSpecList
- : ORDER BY {
- tokenizer.State = ParseState.Default;
- } OrderSpecList
- {
- OrderSpecList l = (OrderSpecList) $4;
- $$ = l;
- }
- | STABLE ORDER BY {
- tokenizer.State = ParseState.Default;
- } OrderSpecList
- {
- OrderSpecList l = (OrderSpecList) $5;
- l.IsStable = true;
- $$ = l;
- }
- ;
- OrderSpecList // returns OrderSpecList
- : OrderSpec
- {
- OrderSpecList osl = new OrderSpecList ();
- osl.Add ((OrderSpec) $1);
- $$ = osl;
- }
- | OrderSpec COMMA OrderSpecList
- {
- OrderSpecList l = (OrderSpecList) $3;
- l.Insert (0, (OrderSpec) $1);
- $$ = l;
- }
- ;
- OrderSpec // returns OrderSpec
- : ExprSingle OrderModifier
- {
- $$ = new OrderSpec ((ExprSingle) $1, (OrderModifier) $2);
- }
- ;
- OrderModifier
- : OrderSpecBase OrderEmptyHandling OptionalCollation
- {
- $$ = new OrderModifier ((XmlSortOrder) $1, (XmlSortOrder) $2, (string) $3);
- }
- ;
- OrderSpecBase // returns XmlSortOrder
- : // empty
- {
- $$ = XmlSortOrder.Ascending;
- }
- | ASCENDING
- {
- $$ = XmlSortOrder.Ascending;
- }
- | DESCENDING
- {
- $$ = XmlSortOrder.Descending;
- }
- ;
- /* FIXME: check if it is correct (especially empty case) */
- OrderEmptyHandling // returns XmlSortOrder
- : // empty
- {
- $$ = XmlSortOrder.Ascending;
- }
- | EMPTY GREATEST
- {
- $$ = XmlSortOrder.Ascending;
- }
- | EMPTY LEAST
- {
- $$ = XmlSortOrder.Descending;
- }
- ;
- OptionalCollation // returns string
- : // empty
- {
- $$ = null;
- }
- | COLLATION STRING_LITERAL
- {
- $$ = $2;
- }
- ;
- /* -------------------------------------
- QuantifiedExpr
- ------------------------------------- */
- QuantifiedExpr
- : SOME QuantifiedExprBody SATISFIES ExprSingle
- {
- QuantifiedExprBodyList l = (QuantifiedExprBodyList) $2;
- $$ = new QuantifiedExpr (false, l, (ExprSingle) $4);
- }
- | EVERY QuantifiedExprBody SATISFIES ExprSingle
- {
- QuantifiedExprBodyList l = (QuantifiedExprBodyList) $2;
- $$ = new QuantifiedExpr (true, l, (ExprSingle) $4);
- }
- ;
- QuantifiedExprBody
- : SingleQuantifiedExprBody
- {
- QuantifiedExprBodyList l = new QuantifiedExprBodyList ();
- l.Add ((QuantifiedExprBody) $1);
- $$ = l;
- }
- | SingleQuantifiedExprBody COMMA QuantifiedExprBody
- {
- QuantifiedExprBodyList l = (QuantifiedExprBodyList) $3;
- l.Insert (0, (QuantifiedExprBody) $1);
- $$ = l;
- }
- ;
- SingleQuantifiedExprBody // returns QuantifiedExprBody
- : DOLLAR {
- tokenizer.State = ParseState.VarName;
- } VarName {
- tokenizer.State = ParseState.Operator;
- } OptionalTypeDeclaration IN {
- tokenizer.State = ParseState.Default;
- } ExprSingle
- {
- $$ = new QuantifiedExprBody ((XmlQualifiedName) $3, (SequenceType) $5, (ExprSingle) $8);
- }
- ;
- /* -------------------------------------
- TypeswitchExpr
- ------------------------------------- */
- TypeswitchExpr // returns TypeswitchExpr
- : TYPESWITCH OPEN_PAREN {
- tokenizer.PushState (ParseState.Operator);
- tokenizer.State = ParseState.Default;
- } Expr CLOSE_PAREN {
- tokenizer.State = ParseState.Operator;
- } RepeatedCaseClause DEFAULT OptionalVarSpec RETURN {
- tokenizer.State = ParseState.Default;
- } ExprSingle
- {
- $$ = new TypeswitchExpr ((ExprSequence) $4, (CaseClauseList) $7, (XmlQualifiedName) $9, (ExprSingle) $12);
- }
- ;
- RepeatedCaseClause // returns CaseClauseList
- : CaseClause
- {
- CaseClauseList ccl = new CaseClauseList ();
- ccl.Add ((CaseClause) $1);
- $$ = ccl;
- }
- | CaseClause RepeatedCaseClause
- {
- CaseClauseList l = (CaseClauseList) $2;
- l.Add ((CaseClause) $1);
- $$ = l;
- }
- ;
- CaseClause // returns CaseClause
- : CASE {
- tokenizer.State = ParseState.ItemType;
- } SequenceType RETURN {
- tokenizer.State = ParseState.Default;
- } ExprSingle
- {
- $$ = new CaseClause ((SequenceType) $3, (ExprSingle) $6, XmlQualifiedName.Empty);
- }
- | CASE {
- tokenizer.State = ParseState.ItemType;
- } DOLLAR {
- tokenizer.State = ParseState.VarName;
- } VarName {
- tokenizer.State = ParseState.Operator;
- } AS {
- tokenizer.State = ParseState.ItemType;
- } SequenceType RETURN {
- tokenizer.State = ParseState.Default;
- } ExprSingle
- {
- $$ = new CaseClause ((SequenceType) $9, (ExprSingle) $12, (XmlQualifiedName) $5);
- }
- ;
- OptionalVarSpec // returns XmlQualifiedName
- : // empty
- {
- $$ = XmlQualifiedName.Empty;
- }
- | DOLLAR VarName
- {
- $$ = (XmlQualifiedName) $2;
- }
- ;
- /* -------------------------------------
- IfExpr
- ------------------------------------- */
- IfExpr
- : IF OPEN_PAREN Expr CLOSE_PAREN {
- tokenizer.State = ParseState.Operator;
- } THEN {
- tokenizer.State = ParseState.Default;
- } ExprSingle ELSE {
- tokenizer.State = ParseState.Default;
- } ExprSingle
- {
- $$ = new IfExpr ((ExprSequence) $3, (ExprSingle) $8, (ExprSingle) $11);
- }
- ;
- /* -------------------------------------
- Logical Expressions
- ------------------------------------- */
- OrExpr
- : AndExpr
- | AndExpr OR {
- tokenizer.State = ParseState.Default;
- } OrExpr
- {
- $$ = new OrExpr ((ExprSingle) $1, (ExprSingle) $4);
- }
- ;
- AndExpr
- : InstanceOfExpr
- | InstanceOfExpr AND {
- tokenizer.State = ParseState.Default;
- } AndExpr
- {
- $$ = new AndExpr ((ExprSingle) $1, (ExprSingle) $4);
- }
- ;
- /* -------------------------------------
- Typed Expressions
- ------------------------------------- */
- InstanceOfExpr
- : TreatExpr
- | TreatExpr INSTANCE OF {
- tokenizer.State = ParseState.ItemType;
- } SequenceType
- {
- $$ = new InstanceOfExpr ((ExprSingle) $1, (SequenceType) $5);
- }
- ;
- TreatExpr
- : CastableExpr
- | CastableExpr TREAT AS {
- tokenizer.State = ParseState.ItemType;
- } SequenceType
- {
- $$ = new TreatExpr ((ExprSingle) $1, (SequenceType) $5);
- }
- ;
- CastableExpr
- : CastExpr
- | CastExpr CASTABLE AS {
- tokenizer.State = ParseState.ItemType;
- } AtomicType OptionalQuestion
- {
- $$ = new CastableExpr ((ExprSingle) $1, (XmlTypeCode) $5, (bool)$6);
- }
- ;
- OptionalQuestion
- : // empty
- {
- $$ = false;
- }
- | QUESTION
- {
- $$ = true;
- }
- ;
- CastExpr
- : ComparisonExpr
- | ComparisonExpr CAST AS {
- tokenizer.State = ParseState.ItemType;
- } AtomicType OptionalQuestion
- {
- $$ = new CastExpr ((ExprSingle) $1, (XmlTypeCode) $5, (bool) $6);
- }
- ;
- /* -------------------------------------
- Comparison Expressions
- ------------------------------------- */
- ComparisonExpr
- : RangeExpr
- | RangeExpr Comp {
- tokenizer.State = ParseState.Default;
- } RangeExpr
- {
- $$ = new ComparisonExpr ((ExprSingle) $1, (ExprSingle) $4, (ComparisonOperator) $2);
- }
- ;
- Comp // returns ComparisonOperator
- : ValueComp
- | GeneralComp
- | NodeComp
- ;
- ValueComp
- : EQ
- {
- $$ = ComparisonOperator.ValueEQ;
- }
- | NE
- {
- $$ = ComparisonOperator.ValueNE;
- }
- | LT
- {
- $$ = ComparisonOperator.ValueLT;
- }
- | LE
- {
- $$ = ComparisonOperator.ValueLE;
- }
- | GT
- {
- $$ = ComparisonOperator.ValueGT;
- }
- | GE
- {
- $$ = ComparisonOperator.ValueGE;
- }
- ;
- GeneralComp
- : EQUAL
- {
- $$ = ComparisonOperator.GeneralEQ;
- }
- | NOT_EQUAL
- {
- $$ = ComparisonOperator.GeneralNE;
- }
- | LESSER
- {
- $$ = ComparisonOperator.GeneralLT;
- }
- | LESSER_EQUAL
- {
- $$ = ComparisonOperator.GeneralLE;
- }
- | GREATER
- {
- $$ = ComparisonOperator.GeneralGT;
- }
- | GREATER_EQUAL
- {
- $$ = ComparisonOperator.GeneralGE;
- }
- ;
- NodeComp
- : IS
- {
- $$ = ComparisonOperator.NodeIs;
- }
- | LESSER2
- {
- $$ = ComparisonOperator.NodeFWD;
- }
- | GREATER2
- {
- $$ = ComparisonOperator.NodeBWD;
- }
- ;
- RangeExpr
- : AdditiveExpr
- | AdditiveExpr TO {
- tokenizer.State = ParseState.Default;
- } AdditiveExpr
- {
- $$ = new RangeExpr ((ExprSingle) $1, (ExprSingle)$4);
- }
- ;
- /* -------------------------------------
- Arithmetic Expressions
- ------------------------------------- */
- AdditiveExpr
- : MultiplicativeExpr
- | MultiplicativeExpr PLUS {
- tokenizer.State = ParseState.Default;
- } AdditiveExpr
- {
- $$ = new ArithmeticOperationExpr ((ExprSingle) $1, (ExprSingle) $4, ArithmeticOperator.Add);
- }
- | MultiplicativeExpr MINUS {
- tokenizer.State = ParseState.Default;
- } AdditiveExpr
- {
- $$ = new ArithmeticOperationExpr ((ExprSingle) $1, (ExprSingle) $4, ArithmeticOperator.Sub);
- }
- ;
- MultiplicativeExpr
- : UnaryExpr
- | UnaryExpr ASTERISK {
- tokenizer.State = ParseState.Default;
- } MultiplicativeExpr
- {
- $$ = new ArithmeticOperationExpr ((ExprSingle) $1, (ExprSingle) $4, ArithmeticOperator.Mul);
- }
- | UnaryExpr DIV {
- tokenizer.State = ParseState.Default;
- } MultiplicativeExpr
- {
- $$ = new ArithmeticOperationExpr ((ExprSingle) $1, (ExprSingle) $4, ArithmeticOperator.Div);
- }
- | UnaryExpr IDIV {
- tokenizer.State = ParseState.Default;
- } MultiplicativeExpr
- {
- $$ = new ArithmeticOperationExpr ((ExprSingle) $1, (ExprSingle) $4, ArithmeticOperator.IDiv);
- }
- | UnaryExpr MOD {
- tokenizer.State = ParseState.Default;
- } MultiplicativeExpr
- {
- $$ = new ArithmeticOperationExpr ((ExprSingle) $1, (ExprSingle) $4, ArithmeticOperator.IMod);
- }
- ;
- UnaryExpr
- : UnionExpr
- | MINUS UnionExpr
- {
- $$ = new MinusExpr ((ExprSingle) $2);
- }
- | PLUS UnionExpr
- {
- $$ = $2;
- }
- ;
- UnionExpr
- : IntersectExceptExpr
- | IntersectExceptExpr UNION {
- tokenizer.State = ParseState.Default;
- } UnionExpr
- {
- $$ = new GroupExpr ((ExprSingle) $1, (ExprSingle) $4, AggregationType.Union);
- }
- | IntersectExceptExpr BAR {
- tokenizer.State = ParseState.Default;
- } UnionExpr
- {
- $$ = new GroupExpr ((ExprSingle) $1, (ExprSingle) $4, AggregationType.Union);
- }
- ;
- IntersectExceptExpr
- : ValueExpr
- | ValueExpr INTERSECT {
- tokenizer.State = ParseState.Default;
- } IntersectExceptExpr
- {
- $$ = new GroupExpr ((ExprSingle) $1, (ExprSingle) $4, AggregationType.Intersect);
- }
- | ValueExpr EXCEPT {
- tokenizer.State = ParseState.Default;
- } IntersectExceptExpr
- {
- $$ = new GroupExpr ((ExprSingle) $1, (ExprSingle) $4, AggregationType.Except);
- }
- ;
- ValueExpr
- : ValidateExpr
- | PathExpr
- ;
- /* -----------------
- Validation Expressions
- ----------------- */
- // FIXME: Here state transition is not well-tracked.
- ValidateExpr // returns ValidateExpr
- : VALIDATE OptionalValidationMode OPEN_CURLY {
- tokenizer.State = ParseState.Default;
- tokenizer.PushState (ParseState.Operator);
- } Expr CloseCurly
- {
- $$ = new ValidateExpr ((XmlSchemaContentProcessing) $2, (ExprSequence) $6);
- }
- ;
- OptionalValidationMode // returns XmlSchemaContentProcessing
- : // empty
- {
- $$ = XmlSchemaContentProcessing.Strict; // FIXME: confirm
- }
- | LAX
- {
- $$ = XmlSchemaContentProcessing.Lax;
- }
- | STRICT
- {
- $$ = XmlSchemaContentProcessing.Strict;
- }
- ;
- /* -----------------
- Path Expressions
- ----------------- */
- PathExpr // returns PathExpr
- : Slash
- {
- $$ = new PathRootExpr ();
- }
- | Slash RelativePathExpr
- {
- $$ = new PathSlashExpr (new PathRootExpr (), (ExprSingle) $2);
- }
- | Slash2 RelativePathExpr
- {
- $$ = new PathSlash2Expr (new PathRootExpr (), (ExprSingle) $2);
- }
- | RelativePathExpr
- ;
- RelativePathExpr // returns PathExpr
- : StepExpr
- | StepExpr Slash RelativePathExpr
- {
- $$ = new PathSlashExpr ((ExprSingle) $1, (ExprSingle) $3);
- }
- | StepExpr Slash2 RelativePathExpr
- {
- $$ = new PathSlash2Expr ((ExprSingle) $1, (ExprSingle) $3);
- }
- ;
- StepExpr // returns ExprSingle
- : AxisStep
- | FilterStep
- ;
- AxisStep // returns PathExpr
- : ForwardOrReverseStep
- | AxisStep Predicate
- {
- $$ = new FilterStepExpr ((ExprSingle) $1, (ExprSequence) $2);
- }
- ;
- ForwardOrReverseStep // returns ExprSingle
- : ForwardStep
- | ReverseStep
- ;
- Predicate
- : OPEN_BRACKET Expr CLOSE_BRACKET {
- tokenizer.State = ParseState.Operator;
- }
- {
- $$ = $2;
- }
- ;
- FilterStep // returns ExprSingle
- : PrimaryExpr
- | FilterStep Predicate
- {
- $$ = new FilterStepExpr ((ExprSingle) $1, (ExprSequence) $2);
- }
- ;
- ForwardStep // returns AxisStepExpr
- : ForwardAxis NodeTest
- {
- $$ = new AxisStepExpr ((XPathAxis) $1, (XPath2NodeTest) $2);
- }
- | AbbrevForwardStep
- ;
- ReverseStep // returns AxisStepExpr
- : ReverseAxis NodeTest
- {
- $$ = new AxisStepExpr ((XPathAxis) $1, (XPath2NodeTest) $2);
- }
- | AbbrevReverseStep
- ;
- ForwardAxis // returns XPathAxis
- : CHILD COLON2
- {
- $$ = XPathAxis.Child;
- }
- | DESCENDANT COLON2
- {
- $$ = XPathAxis.Descendant;
- }
- | ATTRIBUTE COLON2
- {
- $$ = XPathAxis.Attribute;
- }
- | SELF COLON2
- {
- $$ = XPathAxis.Self;
- }
- | DESCENDANT_OR_SELF COLON2
- {
- $$ = XPathAxis.DescendantOrSelf;
- }
- | FOLLOWING_SIBLING COLON2
- {
- $$ = XPathAxis.FollowingSibling;
- }
- | FOLLOWING COLON2
- {
- $$ = XPathAxis.Following;
- }
- ;
- ReverseAxis // returns XPathAxis
- : PARENT COLON2
- {
- $$ = XPathAxis.Parent;
- }
- | ANCESTOR COLON2
- {
- $$ = XPathAxis.Ancestor;
- }
- | PRECEDING_SIBLING COLON2
- {
- $$ = XPathAxis.PrecedingSibling;
- }
- | PRECEDING COLON2
- {
- $$ = XPathAxis.Preceding;
- }
- | ANCESTOR_OR_SELF COLON2
- {
- $$ = XPathAxis.AncestorOrSelf;
- }
- ;
- // LAMESPEC: in the XQuery spec, it is "@? NodeTest", but NodeKindTest
- // should not appear after AT. (imagine @processing-instruction::(name)).
- AbbrevForwardStep // returns NodeTestExpr
- : NodeTest
- {
- $$ = new AxisStepExpr (XPathAxis.Child, (XPath2NodeTest) $1);
- }
- | AT NameTest
- {
- $$ = new AxisStepExpr (XPathAxis.Attribute, new XPath2NodeTest ((XmlQualifiedName) $2));
- }
- ;
- AbbrevReverseStep // returns AxisStepExpr
- : DOT2
- {
- $$ = new AxisStepExpr (XPathAxis.Parent, null);
- }
- ;
- NodeTest // returns NodeTest
- : KindTest
- {
- $$ = new XPath2NodeTest ((KindTest) $1);
- }
- | NameTest
- {
- $$ = new XPath2NodeTest ((XmlQualifiedName) $1);
- }
- ;
- NameTest // returns XmlQualifiedName
- : QName
- | Wildcard {
- tokenizer.State = ParseState.Operator;
- }
- ;
- Wildcard // returns XmlQualifiedName /*ws:explicit*/
- : ASTERISK
- {
- $$ = new XmlQualifiedName ("*", "*");
- }
- | WILD_LOCALNAME
- {
- $$ = (XmlQualifiedName) $1;
- }
- | WILD_PREFIX
- {
- $$ = (XmlQualifiedName) $1;
- }
- ;
- AtomicType // returns XmlTypeCode
- : QName
- {
- $$ = GetAtomicTypeCode ((XmlQualifiedName) $1);
- }
- ;
- ItemType // returns ItemType
- : AtomicType {
- tokenizer.State = ParseState.OccurenceIndicator;
- }
- {
- $$ = new ItemType ((XmlTypeCode) $1);
- }
- | KindTest
- | ITEM OPEN_PAREN CLOSE_PAREN {
- tokenizer.State = ParseState.OccurenceIndicator;
- }
- {
- $$ = new ItemType (XmlTypeCode.Item);
- }
- ;
- KindTest // returns KindTest
- : DocumentTest
- | ElementTest
- | AttributeTest
- | PITest
- | CommentTest
- | TextTest
- | AnyKindTest
- ;
- PITest
- : PROCESSING_INSTRUCTION OPEN_PAREN {
- // LAMESPEC: push state is described as Operator, but should
- // be OccurenceIndicator (as any KindTest could be followed by
- // '?' '+' or '*')
- tokenizer.PushState (ParseState.OccurenceIndicator);
- tokenizer.State = ParseState.KindTestForPI;
- } PITestContent CLOSE_PAREN {
- tokenizer.PopState ();
- }
- {
- $$ = $4;
- }
- ;
- PITestContent // returns KindTest
- : // empty
- {
- $$ = new KindTest (XmlTypeCode.ProcessingInstruction);
- }
- | NCName
- {
- $$ = new XmlPITest ((string) $1);
- }
- | STRING_LITERAL
- {
- $$ = new XmlPITest ((string) $1);
- }
- ;
- CommentTest
- : COMMENT OPEN_PAREN {
- tokenizer.PushState (ParseState.OccurenceIndicator);
- tokenizer.State = ParseState.KindTest;
- } CLOSE_PAREN {
- tokenizer.PopState ();
- }
- {
- $$ = new KindTest (XmlTypeCode.Comment);
- }
- ;
- TextTest
- : TEXT OPEN_PAREN {
- tokenizer.PushState (ParseState.OccurenceIndicator);
- tokenizer.State = ParseState.KindTest;
- } CLOSE_PAREN {
- tokenizer.PopState ();
- }
- {
- $$ = new KindTest (XmlTypeCode.Text);
- }
- ;
- AnyKindTest
- : NODE OPEN_PAREN {
- tokenizer.PushState (ParseState.OccurenceIndicator);
- tokenizer.State = ParseState.KindTest;
- } CLOSE_PAREN {
- tokenizer.PopState ();
- }
- {
- $$ = new KindTest (XmlTypeCode.Node);
- }
- ;
- DocumentTest // returns DocumentTest
- : DOCUMENT_NODE OPEN_PAREN {
- tokenizer.PushState (ParseState.OccurenceIndicator);
- tokenizer.State = ParseState.KindTest;
- } DocumentTestContent CLOSE_PAREN {
- tokenizer.PopState ();
- }
- {
- $$ = $4;
- }
- ;
- DocumentTestContent // returns DocumentTest
- : // empty
- {
- $$ = new KindTest (XmlTypeCode.Document);
- }
- | ElementTest
- {
- $$ = new DocumentTest ((ElementTest) $1);
- }
- ;
- ElementTest // returns ElementTest
- : ELEMENT OPEN_PAREN {
- tokenizer.PushState (ParseState.OccurenceIndicator);
- tokenizer.State = ParseState.KindTest;
- } ElementTestContent CLOSE_PAREN {
- tokenizer.PopState ();
- }
- {
- $$ = $4;
- }
- ;
- ElementTestContent // returns ElementTest
- : // empty
- {
- $$ = new KindTest (XmlTypeCode.Element);
- }
- | ElementNameOrWildcard
- {
- $$ = new ElementTest ((XmlQualifiedName) $1);
- }
- | ElementNameOrWildcard COMMA TypeName OptionalQuestion
- {
- $$ = new ElementTest ((XmlQualifiedName) $1, (XmlQualifiedName) $3, (bool) $4);
- }
- ;
- OptionalQuestion // returns bool
- : // empty
- {
- $$ = false;
- }
- | QUESTION
- {
- $$ = true;
- }
- ;
- AttributeTest // returns AttributeTest
- : ATTRIBUTE OPEN_PAREN {
- tokenizer.PushState (ParseState.OccurenceIndicator);
- tokenizer.State = ParseState.KindTest;
- } AttributeTestContent CLOSE_PAREN {
- tokenizer.PopState ();
- }
- {
- $$ = $4;
- }
- ;
- AttributeTestContent // returns AttributeTest
- : // empty
- {
- $$ = AttributeTest.AnyAttribute;
- }
- | AttributeNameOrWildcard
- {
- $$ = new AttributeTest ((XmlQualifiedName) $1);
- }
- | AttributeNameOrWildcard COMMA TypeNameOrWildcard
- {
- $$ = new AttributeTest ((XmlQualifiedName) $1, (XmlQualifiedName) $3);
- }
- ;
- ElementName
- : QName
- ;
- AttributeName
- : QName
- ;
- TypeName
- : QName
- ;
- ElementNameOrWildcard // returns XmlQualifiedName
- : ElementName
- | ASTERISK
- {
- $$ = new XmlQualifiedName ("*", "*");
- }
- ;
- AttributeNameOrWildcard // returns XmlQualifiedName
- : AttributeName
- | ASTERISK
- {
- $$ = new XmlQualifiedName ("*", "*");
- }
- ;
- TypeNameOrWildcard // returns XmlQualifiedName
- : TypeName
- | ASTERISK
- {
- $$ = new XmlQualifiedName ("*", "*");
- }
- ;
- /* ----------------
- Primary Expressions
- ---------------- */
- PrimaryExpr // returns ExprSingle
- : Literal {
- tokenizer.State = ParseState.Operator;
- }
- | VarRef
- | ParenthesizedExpr
- | ContextItemExpr
- | FunctionCall
- | Constructor
- | OrderedExpr
- | UnorderedExpr
- ;
- Literal
- : DECIMAL_LITERAL
- {
- $$ = new DecimalLiteralExpr ((decimal) $1);
- }
- | DOUBLE_LITERAL
- {
- $$ = new DoubleLiteralExpr ((double) $1);
- }
- | STRING_LITERAL
- {
- $$ = new StringLiteralExpr ((string) $1);
- }
- ;
- /*
- NUMERIC_LITERAL
- : IntegerLiteral
- | DecimalLiteral
- | DoubleLiteral
- ;
- IntegerLiteral
- : Digits
- ;
- DecimalLiteral
- : DOT Digits
- | Digits DOT OptDigits
- ;
- DoubleLiteral
- : DoubleDecimalPartSpec ExponentSpec
- ;
- DoubleDecimalPartSpec
- : DOT Digits
- | Digits
- | Digits DOT OptDigits
- ExponentSpec
- : // empty/*
- | ExponentAlpha Digits
- | ExponentAlpha PLUS Digits
- | ExponentAlpha MINUS Digits
- ;
- ExponentAlpha
- : LARGE_E
- | SMALL_E
- ;
- OptDigits
- : // empty/*
- | Digits
- ;
- Digits
- : ZERO_TO_NINE_SEQ
- ;
- STRING_LITERAL
- : QUOT STRING_LITERALContentQuot
- | APOS STRING_LITERALContentApos
- ;
- STRING_LITERALContentQuot
- : PREDEFINED_ENTITY_REF
- | CHAR_REF
- | QUOT2
- | REMAINING_LITERAL
- ;
- STRING_LITERALContentApos
- : PREDEFINED_ENTITY_REF
- | CHAR_REF
- | APOS2
- | REMAINING_LITERAL
- ;
- */
- VarRef // returns VariableReferenceExpr
- : DOLLAR {
- tokenizer.State = ParseState.VarName;
- } VarName
- {
- $$ = new VariableReferenceExpr ((XmlQualifiedName) $3);
- }
- ;
- VarName // returns XmlQualifiedName
- : QName {
- tokenizer.State = ParseState.Operator;
- }
- {
- $$ = $1;
- }
- ;
- ParenthesizedExpr // returns ParenthesizedExpr
- : OPEN_PAREN OptionalExpr CLOSE_PAREN {
- tokenizer.State = ParseState.Operator;
- }
- {
- $$ = new ParenthesizedExpr ((ExprSequence) $2);
- }
- ;
- OptionalExpr
- : // empty
- {
- $$ = new ExprSequence ();
- }
- | Expr
- ;
- ContextItemExpr // returns ContextItemExpr
- : DOT {
- tokenizer.State = ParseState.Operator;
- }
- {
- $$ = new ContextItemExpr ();
- }
- ;
- FunctionCall
- : QName OPEN_PAREN {
- tokenizer.State = ParseState.Default;
- } OptionalExpr CLOSE_PAREN {
- tokenizer.State = ParseState.Operator;
- }
- {
- XmlQualifiedName name = (XmlQualifiedName) $1;
- if (name.Namespace == "")
- name = new XmlQualifiedName (name.Name, tokenizer.DefaultFunctionNamespace);
- if (name.Namespace != ""
- && name.Namespace != XmlSchema.XdtNamespace
- && reservedFunctionNames [name.Name] != null)
- throw new XmlQueryCompileException (String.Format ("'{0}' is reserved and cannot be used as a function name.", name.Name));
- $$ = new FunctionCallExpr (name, (ExprSequence) $4);
- }
- ;
- OrderedExpr
- : ORDERED OPEN_BRACKET Expr CLOSE_BRACKET
- {
- $$ = new OrderSpecifiedExpr ((ExprSequence) $3, true);
- }
- ;
- UnorderedExpr
- : UNORDERED OPEN_BRACKET {
- tokenizer.PushState (ParseState.Operator);
- tokenizer.State = ParseState.Default;
- } Expr CLOSE_BRACKET {
- tokenizer.PopState ();
- }
- {
- $$ = new OrderSpecifiedExpr ((ExprSequence) $4, false);
- }
- ;
- /* -----------------
- Constructors
- ----------------- */
- Constructor // returns ExprSingle
- : DirElemConstructor
- | ComputedConstructor
- | XmlComment
- | XmlPI
- | XmlCData
- ;
- DirElemConstructor // returns XmlElemConstructor
- : LESSER {
- if (tokenizer.State == ParseState.ElementContent)
- tokenizer.PushState (tokenizer.State);
- // if (tokenizer.State == ParseState.Default)
- else // considering <foo></foo><bar></bar> there after </foo> state is Operator.
- tokenizer.PushState (ParseState.Operator);
- tokenizer.State = ParseState.StartTag;
- // FIXME: tokenizer.Space = WhitespaceHandling.Significant;
- } QName AttributeList FollowDirElemConstructor {
- tokenizer.PopState ();
- }
- {
- ExprSequence expr = new ExprSequence ();
- expr.AddRange ((ICollection) $4);
- expr.AddRange ((ICollection) $5);
- $$ = new XmlElemConstructor ((XmlQualifiedName) $3, expr);
- }
- ;
- FollowDirElemConstructor // returns ExprSequence
- : EMPTY_TAG_CLOSE
- {
- $$ = new ExprSequence ();
- }
- | GREATER {
- tokenizer.State = ParseState.ElementContent;
- } ElementContentList END_TAG_START {
- tokenizer.State = ParseState.EndTag;
- } QName {
- // tokenizer.Space = WhitespaceHandling.Arbitrary;
- } GREATER
- {
- $$ = $3;
- }
- ;
- ElementContentList // returns ExprSequence
- : // empty
- {
- $$ = new ExprSequence ();
- }
- | ElementContent ElementContentList
- {
- ExprSequence el = (ExprSequence) $2;
- el.Insert (0, (ExprSingle) $1);
- $$ = el;
- }
- ;
- AttributeList // returns XmlAttrConstructorList
- : // empty
- {
- $$ = new XmlAttrConstructorList ();
- }
- | /* space */ Attribute AttributeList
- {
- XmlAttrConstructorList al = (XmlAttrConstructorList) $2;
- al.Insert (0, (XmlAttrConstructor) $1);
- $$ = al;
- }
- ;
- Attribute // returns XmlAttrConstructor
- : QName /* opt-space */ EQUAL /* opt-space */ AttributeValue
- {
- $$ = new XmlAttrConstructor ((XmlQualifiedName) $1, (ExprSequence) $3);
- }
- ;
- /*
- // FIXME: it should be more complex
- AttributeValue // returns ExprSequence
- : STRING_LITERAL
- {
- ExprSequence es = new ExprSequence ();
- es.Insert (0, new StringLiteralExpr ((string) $1));
- $$ = es;
- }
- ;
- */
- AttributeValue // returns ExprSequence
- : QUOT {
- tokenizer.State = ParseState.QuotAttributeContent;
- } AttributeValueContentSequence QUOT {
- tokenizer.State = ParseState.StartTag;
- }
- {
- $$ = $3;
- }
- | APOS {
- tokenizer.State = ParseState.AposAttributeContent;
- } AttributeValueContentSequence APOS {
- tokenizer.State = ParseState.StartTag;
- }
- {
- $$ = $3;
- }
- ;
- AttributeValueContentSequence // returns ExprSequence
- : // empty
- {
- $$ = new ExprSequence ();
- }
- | AttributeValueContent AttributeValueContentSequence
- {
- ExprSequence es = (ExprSequence) $2;
- es.Insert (0, (ExprSingle) $1);
- $$ = es;
- }
- ;
- AttributeValueContent // returns ExprSingle
- : ATT_VALUE_LITERAL // including "{{", "}}" and char/predefined entities
- {
- $$ = new StringLiteralExpr ((string) $1);
- }
- | EnclosedExpr
- ;
- EnclosedExpr // returns EnclosedExpr
- // FIXME: check if this state transition is valid for ElementContent and AttributeValueContent
- : OPEN_CURLY {
- switch (tokenizer.State) {
- case ParseState.ElementContent:
- case ParseState.QuotAttributeContent:
- case ParseState.AposAttributeContent:
- tokenizer.PushState (tokenizer.State);
- break;
- }
- tokenizer.State = ParseState.Default;
- } Expr CloseCurly
- {
- $$ = new EnclosedExpr ((ExprSequence) $3);
- }
- ;
- ElementContent // returns ExprSingle
- : ELEM_CONTENT_LITERAL // including "{{", "}}" and char/predefined entities
- {
- $$ = new XmlTextConstructor ((string) $1);
- }
- | DirElemConstructor
- | EnclosedExpr
- | XmlCData
- | XmlComment
- | XmlPI
- ;
- XmlCData
- : XML_CDATA_START XML_CDATA_TO_END
- {
- $$ = new XmlTextConstructor ((string) $2);
- }
- ;
- XmlComment // returns XmlCommentConstructor
- : XML_COMMENT_START XML_COMMENT_TO_END
- {
- $$ = new XmlCommentConstructor ((string) $2);
- }
- ;
- XmlPI // returns XmlPIConstructor
- : XML_PI_START {
- tokenizer.PushState (tokenizer.State);
- tokenizer.State = ParseState.XmlPI;
- } PITarget {
- tokenizer.State = ParseState.XmlPIContent;
- } XML_PI_TO_END {
- tokenizer.PopState ();
- }
- {
- string name = (string) $3;
- $$ = new XmlPIConstructor (name, (string) $5);
- }
- ;
- PITarget
- : NCName
- ;
- ComputedConstructor // returns ExprSingle
- : CompElemConstructor
- | CompAttrConstructor
- | CompDocConstructor
- | CompTextConstructor
- | CompXmlPI
- | CompXmlComment
- | CompNSConstructor
- ;
- CompElemConstructor
- : ELEMENT QName OPEN_CURLY Expr CloseCurly
- {
- $$ = new XmlElemConstructor ((XmlQualifiedName) $2, (ExprSequence) $4);
- }
- | ELEMENT OPEN_CURLY Expr CloseCurly OPEN_CURLY Expr CloseCurly
- {
- $$ = new XmlElemConstructor ((ExprSequence) $3, (ExprSequence) $6);
- }
- ;
- CompAttrConstructor
- : ATTRIBUTE QName OPEN_CURLY Expr CloseCurly
- {
- $$ = new XmlAttrConstructor ((XmlQualifiedName) $2, (ExprSequence) $4);
- }
- | ATTRIBUTE OPEN_CURLY Expr CloseCurly OPEN_CURLY Expr CloseCurly
- {
- $$ = new XmlAttrConstructor ((ExprSequence) $3, (ExprSequence) $6);
- }
- ;
- CompNSConstructor
- : NAMESPACE NCName OPEN_CURLY Expr CloseCurly
- {
- $$ = new XmlNSConstructor ((string) $2, (ExprSequence) $4);
- }
- ;
- CompDocConstructor
- : DOCUMENT OPEN_CURLY Expr CloseCurly
- {
- $$ = new XmlDocConstructor ((ExprSequence) $3);
- }
- ;
- CompTextConstructor
- : TEXT OPEN_CURLY Expr CloseCurly
- {
- $$ = new XmlTextConstructor ((ExprSequence) $3);
- }
- ;
- CompXmlComment
- : COMMENT OPEN_CURLY Expr CloseCurly
- {
- $$ = new XmlCommentConstructor ((ExprSequence) $3);
- }
- ;
- CompXmlPI
- : PROCESSING_INSTRUCTION NCName OPEN_CURLY Expr CloseCurly
- {
- $$ = new XmlPIConstructor ((string) $2, (ExprSequence) $4);
- }
- | PROCESSING_INSTRUCTION OPEN_CURLY Expr CloseCurly OPEN_CURLY Expr CloseCurly
- {
- $$ = new XmlPIConstructor ((ExprSequence) $3, (ExprSequence) $6);
- }
- ;
- /* -----------------
- Terminal Wrappers
- ----------------- */
- NCName // returns string
- : NCNAME
- ;
- QName // returns XmlQualifiedName. Note that this state is just a wrapper for state transition.
- : QNAME {
- switch (tokenizer.State) {
- case ParseState.Default:
- tokenizer.State = ParseState.Operator;
- break;
- case ParseState.ItemType:
- tokenizer.State = ParseState.OccurenceIndicator;
- break;
- case ParseState.KindTest:
- case ParseState.SchemaContextStep:
- tokenizer.State = ParseState.CloseKindTest;
- break;
- case ParseState.ExtKey:
- tokenizer.State = ParseState.ExprComment;
- break;
- }
- }
- ;
- Slash
- : SLASH {
- switch (tokenizer.State) {
- case ParseState.Operator:
- tokenizer.State = ParseState.Default;
- break;
- case ParseState.KindTest:
- tokenizer.State = ParseState.SchemaContextStep;
- break;
- }
- }
- ;
- Slash2
- : SLASH2 {
- if (tokenizer.State == ParseState.Operator)
- tokenizer.State = ParseState.Default;
- }
- ;
- CloseCurly
- : CLOSE_CURLY {
- if (tokenizer.State == ParseState.Operator)
- tokenizer.PopState ();
- }
- ;
- %%
- }
- #endif
|