| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524 |
- %{
- //
- // 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 EQUAL AttributeValue /* note: whitespace handling */
- {
- $$ = new XmlAttrConstructor ((XmlQualifiedName) $1, (ExprSequence) $3);
- }
- ;
- // FIXME: it should be more complex
- AttributeValue
- : STRING_LITERAL
- {
- ExprSequence es = new ExprSequence ();
- es.Insert (0, new StringLiteralExpr ((string) $1));
- $$ = es;
- }
- ;
- /*
- AttributeValue // returns ExprSequence
- : QUOT AttributeValueContentSequence QUOT
- {
- $$ = $2;
- }
- | APOS AttributeValueContentSequence APOS
- {
- $$ = $2;
- }
- ;
- 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 ExprLiteral ((string) $1);
- }
- | EnclosedExpr
- ;
- */
- EnclosedExpr // returns EnclosedExpr
- // FIXME: check if this state transition is valid for ElementContent and AttributeValueContent
- : OPEN_CURLY {
- if (tokenizer.State == ParseState.ElementContent)
- tokenizer.PushState (tokenizer.State);
- 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
|