Märkus.
Juurdepääs sellele lehele nõuab autoriseerimist. Võite proovida sisse logida või kausta vahetada.
Juurdepääs sellele lehele nõuab autoriseerimist. Võite proovida kausta vahetada.
Märkus.
Kogukonna huvirühmad on nüüd Yammerilt üle läinud Microsoft Viva Engage'ile. Viva Engage'i kogukonnaga liitumiseks ja viimastes aruteludes osalemiseks täitke vorm Taotle juurdepääsu taotlemine Viva Engage'i kogukonnale ja valige kogukond, millega soovite liituda.
See artikkel sisaldab süntaksiviidet X++.
X++ märksõnad
Järgmises tabelis toodud X++ märksõnad on reserveeritud. Neid märksõnu ei saa kasutada ühelgi muul eesmärgil.
| Reserveeritud sõna | Kirjeldus | Seostuv teave |
|---|---|---|
| ! | Ei. | Relatsioontehtemärgid |
| != | Ebavõrdsuse tehtemärk (pole võrdne). | Relatsioontehtemärgid |
| # | Makronimede eesliide. | Juhised: makro testimine #define ja #if abil |
| & | Kahendkuju JA. | Aritmeetilised tehtemärgid |
| && | Loogiline AND. | Relatsioontehtemärgid |
| ( | Funktsioonikutse tehtemärk, mis näitab funktsioonikutse algust. | |
| ) | Funktsioonikutse tehtemärk, mis näitab funktsioonikutse lõppu. | |
| * | Korrutada. Tärni (*) kasutatakse ka X++ SQL-is. Üks võimalus on tähistada lauses select tabelite kõiki välju. Teine kasutus on tehtemärgi metamärgina like , mis tähendab 0 kuni mitut mis tahes tüüpi märki. Tehtemärk like kasutab ka märki ? . |
Aritmeetilised tehtemärgid |
| ^ | Kahend-XOR. | Aritmeetilised tehtemärgid |
| | | Kahend- VÕI. | Aritmeetilised tehtemärgid |
| || | Loogiline OR. | Relatsioontehtemärgid |
| ~ | Ei. | Aritmeetilised tehtemärgid |
| + | Pluss. | Aritmeetilised tehtemärgid |
| ++ | Juurdekasvu. | Määramisoperaatorid |
| += | Liidri määramine. | Määramisoperaatorid |
| , | Koma tehtemärk. Komadega eraldatud avaldisi hinnatakse järjest vasakult paremale. | |
| - | Miinus. | Aritmeetilised tehtemärgid |
| -- | Dekrementtehtemärk. | Määramisoperaatorid |
| -= | Lahutav määramine. | Määramisoperaatorid |
| . | Klassiliikme juurdepääsu tehtemärk näiteks formRun.run kasutab run klassitüüpi FormRunobjekti meetodit. |
|
| / | Jagada. | Aritmeetilised tehtemärgid |
| \ | Paomärgid stringides. Väljub lisajutumärkidest ja teatud tähtedest (nt "\t" tabelduskohaks). | |
| @ | Märksõnade paomärksõnad. Näiteks var @str = 1@abstract; ei saa kompileerida ilma märgita @ , mis põhjustab selle järel oleva stringi identifikaatorina käsitlemise. Samuti mõjutab see literaalstringe, eirates märgi \ paoefekti ja lubades stringil ulatuda rohkem kui ühe rea lähtekoodis. Uut joont tähistab üks kuueteistkümnendsüsteemis 0x0A märk, mida nimetatakse tavaliselt joonekanaliks. Nagu 0x0D0A, ei ole lisatud kuueteistkümnendsüsteemi 0x0D tagasijooksu märki. | |
| : | Koolonit (:) kasutatakse lauses switch täheregistri väärtuste eraldamiseks. |
|
| :: | Kasutatakse staatiliste (klassi) meetodite kutsumiseks: ClassName::methodName() ja loendamisliteraalide (nt NoYes::Yes) määramiseks. | |
| ; | Lõpetab laused. Kasutatakse silmustes või lähtestaja for , värskenduse ja väärtusekontrolli osade eraldajana. |
|
| < | Alla. | Relatsioontehtemärgid |
| << | Vasak vahetus. | Aritmeetilised tehtemärgid |
| <= | Väiksem või võrdne. | Aritmeetilised tehtemärgid |
| = | Määramisoperaator. Argumendist vasakul= olev argument on seatud paremale jääva argumendi väärtusele. | Määramisoperaatorid |
| == | Tagastab väärtuse true, kui avaldised on võrdsed. | Relatsioontehtemärgid |
| > | Suurem. | Relatsioontehtemärgid |
| >= | Suurem või võrdne. | Relatsioontehtemärgid |
| >> | Bititaseme parem tõstuklahv. See tehtemärk nihutab bitid vasakus servas paremas servas oleva arvu võrra. Iga nihe jagab arvu 2^n-ga, kus n on nihutatud positsioonide arv. | Aritmeetilised tehtemärgid |
| ?: | Ternary tehtemärk. Küsimärki (?) kasutab tehtemärk like täpselt ühe mis tahes märgi tähistamiseks. Tehtemärk like kasutab ka märki. |
Ternary Tehtemärk (?) |
| [ | Massiivdeklaklaator, avatud. Seda tuleb kasutada koos märgiga "]". | |
| ] | Massiivdeklaklaator, sulge. Tuleb kasutada koos märgiga "[". | |
| { | Käivitab liitlause, mis võib omakorda sisaldada null- või rohkem lauseid. Liitlause lõpeb lähima vastega "}". | |
| } | Näitab ülalkirjeldatud liitlause lõppu. Esimene neist lausetest peab olema kuvatud {. | |
| abstraktne | Klassi ja meetodi muutefunktsioonid.
Abstraktset klassi ei saa uue märksõnaga koostada – ainult sellest tuletatud klassid saavad.
Abstraktset meetodit ei saa kutsuda, vaid saab kutsuda ainult meetodeid, mis seda alistavad. Tabelit saab abstraktsena muuta, määrates AOT-s atribuudi Abstrakt väärtuseks Jah või kasutades DictTable klassi.
Abstraktse atribuudi vaikeväärtus on Ei ja seda ei saa seada, kui tabelit ei laiendata teise tabeliga. Igal abstraktse tabeli real peab olema tuletatud tabelis sõltuv rida. See tähendab, et iga abstraktse tabeli rea väärtus atribuudi InstanceRelationType väljal on suurem kui null. Tabeli abstraktseks märkimisel pole muid efekte. Mitteametlikult kasutavad programmeerijad sageli mõistet konkreetne , et kirjeldada klassi, mis pole abstraktne. |
Method Modifiers Table Inheritance Overview |
| anytype | Tüüp, mis võib sisaldada suvalist tüüpi väärtusi. | Suvaline tüüp |
| nagu | Vajalik tuletatud klassimuutujale põhiklassi muutuja määramisel. Näiteks klassi Derived klassi korral Base väldib lause myDerived = myBase as Derived; kompilaatoritõrke, kasutades märksõnana. See märksõna kehtib ka tuletatud tabelimuutujale põhitabelimuutuja määramisel. Kui väärtus (myBase) pole määratud tüüpi (Tuletatud), tagastab avaldis tühiväärtuse. |
Avaldise tehtemärgid: is ja päriluse seisuga |
| Asc | Lause or-klausliorderbygroupsuvand.byselect Sortimine on tõusev järjestus. |
Vali lause süntaks |
| juures | Määrab prindiakna paigutuse lause osana print . Prindilauset ei tohiks kasutada. |
Prindi laused |
| Avg | Tagastab lauses klausliga group byselect määratud ridade väljade keskmise. |
Vali lause süntaks |
| Murda | Kohene väljumine iteratiivsest koodiplokist. | Katkesta laused |
| breakpoint | Tähistab katkestuspunkti, mis on määratud silumiseks. Koodis katkestuspunkti määramiseks kirjutage: breakpoint; |
|
| by | Reserveeritud termini osa( nt rühmitusalus ja järjestusalus). | |
| byref | Määrab, et kutsutud meetodile edastatav parameeter edastatakse väärtuse asemel viite (aadressi) abil. Byref-i kasutatakse klahvikombinatsioonis X++, kui kutsute .NET-meetodit, mis kasutab parameetrit viitena (nt C# märksõnad välja või viide). | Õpetus: kasutage CLR-i interopi jaoks byref-märksõna. |
| kohtuasi | Valik lauses switch . |
Lausete vahetamine |
| Saagi | Kasutatakse erandite töötlemisel. | Erandi käsitlemine katsega ja märksõnade püüdmine |
| changeCompany | Muudab andmebaasisätteid mõnes muus ettevõttes. | Ettevõtte kujundusmustri muutmine |
| klass | Kuulutab klassi. | Klassid X++ |
| klient | Meetodi muutefunktsiooni. Neid muuteid enam ei kasutata. Kõik meetodid käivitatakse serveritasemel. | Meetodi muutefunktsioonid |
| konteiner |
container Määrab tüübi. Mahutid sisaldavad aatomväärtuste jada ja muid ümbriseid. |
Ümbrised |
| jätkama | Jõustab tsükli järgmise iteratsiooni. | Jätka lauseid |
| krahv | Tagastab lauses klausliga group byselect määratud ridade kirjete arvu. |
Vali lause süntaks |
| crossCompany |
select Põhjustab lause tagastamise kõigi ettevõtete kohta, kust kasutajal on õigus andmeid lugeda. |
Ettevõtteülene X++ koodi põhitõed |
| kuupäev | Määrab muutuja, mille tüüp dateon . |
Kuupäevad |
| Vaikimisi | Vaikejuhtum lausetes switch . Vaikeosa koodiplokk käivitatakse, kui lüliti väärtus ei vasta ühelegi case lauses esitatud klauslile switch . |
Lausete vahetamine |
| Delegeerida | Klassi liige, kes saab salvestada mitu viidet teiste klasside meetoditele ja kutsuda kõik need meetodid, kui seda palutakse teha. Volitatud esindaja saab talletada viiteid mitmesugustele meetoditele, sealhulgas järgmist.
|
Sündmuseterminoloogia ja märksõnad X++, C# võrdlus: sündmus |
| delete_from | Võimaldab teil andmebaasist kirjeid kustutada. | delete_from |
| Desc | Lause or-klausli order bygroup by suvandselect. Sortimine on laskuvas järjestuses. |
Vali lause süntaks |
| Kuvada | Meetodi muutefunktsiooni.
Kuvamis<-/kuvamismeetodit> kasutatakse vormi juhtelemendis arvutatud väärtuste kuvamiseks. Erinevalt tavalistest väljadest ei talletata neid väärtusi andmebaasis, vaid arvutatakse dünaamiliselt. |
Meetodi muutefunktsioonid |
| Div | Täisarvu jagamine. | Aritmeetilised tehtemärgid |
| tegema |
do...while Tsükli algus. |
Tegema... tsüklite ajal |
| toimetama | Meetodi muutefunktsiooni. X edit ++ meetod võimaldab kasutajatel muuta vormi juhtelemendi väärtusi kohandatud loogika käivitamisel. Erinevalt meetoditest display , kus kuvatakse ainult arvutatud väärtused, võimaldavad redigeerimismeetodid nii vaatamist kui ka redigeerimist.
|
Meetodi muutefunktsioonid |
| Muud | Tingimuslik täitmine (if...else). Lause else osa if käivitatakse, kui if-lause avaldist hinnatakse false |
kui ja kui ... else Statements |
| eventHandler | Seda tuleb kasutada iga kord, kui lisate või kustutate volitatud esindaja meetodiviite või += tehtemärgi -= abil. Näide: myDelegate += eventHandler(OtherClass::myStaticMethod); | Sündmuseterminoloogia ja märksõnad X++, C# võrdlus: sündmus |
| Olemas |
join Kasutatakse lausetes select klauslitega. |
Vali lause süntaks |
| Laiendab | Klassi või liidese deklareerimislause. Kui teie klass ei laienda otseselt teist klassi, käsitletakse klassi laiendamist Object (nagu oleksite kirjutanud "laiendab objekti"). |
Alamklassi loomine |
| väär | Kahendsõnaline. | Kahendmuutujad |
| Lõplik | Klassi ja meetodi muutefunktsioonid. Määrab, et seda meetodit ei saa alistada. | Meetodi muutefunktsioonid |
| firstFast | Seda kasutatakse lausetes select esimese rea toomise kiirendamiseks. |
Vali lause süntaks |
| firstOnly | Seda kasutatakse lausetes select ainult esimese kirje toomiseks. Märksõna firstOnly ei taga, et X++ SQL-lause select toob maksimaalselt ühe kirje. Kui AOS saab vahemälu abil EntireTable täita lause andmevajadusi select , firstOnly siis märksõna ignoreeritakse. |
Select Statement Syntax Set-based Caching |
| firstOnly10 | Sama mis esimenekord, välja arvatud tagastab ühe rea asemel 10 rida. | |
| firstOnly100 | Sama mis esimenekord, välja arvatud tagastab ühe rea asemel 100 rida. | |
| firstOnly1000 | Sama mis esimenekord, välja arvatud tagastab ühe rea asemel 1000 rida. | |
| Flush | Tühjendab kogu tabelivahemälu. See võib olla kasulik siis, kui soovite tagada, et kõik tabelis tehtud muudatused kajastuksid vahetult järgnevates toimingutes. | Set-based Caching |
| for | Tsükli iteratsiooni jaoks. | Tsüklite jaoks |
| forceLiterals | Kasutatakse lausetes select , et kuvada tegelikud väärtused, mida kasutatakse optimeerimise ajal Microsoft SQL Serveri andmebaasi klauslites where . |
Vali lause süntaks |
| forceNestedLoop | Sunnib SQL Serveri andmebaasi kasutama pesastatud tsükli algoritmi, et töödelda konkreetset SQL-lauset, mis sisaldab i join. |
Vali lause süntaks |
| forcePlaceholders | Kasutatakse lausetes select , et tuuma ei avaldataks optimeerimise ajal Microsoft SQL Serveri andmebaasi klauslites where kasutatud tegelikke väärtusi. |
Vali lause süntaks |
| forceSelectOrder | Jõustab SQL Serveri andmebaasi juurdepääsu tabelitele määratud järjestuses. | Vali lause süntaks |
| forUpdate | Valib ainult värskendatavad kirjed. Toodavate kirjetega tehtav toiming on värskendus. Olenevalt aluseks olevast andmebaasist võivad kirjed olla teiste kasutajate jaoks lukus. | Vali lause süntaks |
| albaania | Osa lausest select . Klausel from määrab tabelipuhvri, milles veerud on olemas. |
Vali lause süntaks |
| rühm | Osa group by lause klauslist select . |
Vali lause süntaks |
| kui | Tingimuslik täitmine. | kui ja kui ... else Statements |
| Rakendab | i rakendamine .interface |
Liideste ülevaade |
| insert_recordset | Kopeerib andmed ühest või mitmest tabelist ühte tulemuseks saadud sihttabelisse ühel serverireisil. | insert_recordset |
| Int | Määrab tüübimuutuja integer (32-bitine). |
Täisarvud |
| int64 | Määrab tüübimuutuja integer (64-bitine). |
Täisarvud |
| Liides | Liidese deklaratsioon. | Liideste ülevaade |
| On | Küsib, kas klassimuutuja viidatud objekt pärib sellelt klassilt või kuulub antud klassi. Näiteks klassi Derived klassi korral Base tagastab avaldis (myDerived is Base)väärtuse true. See märksõna kehtib klasside päriluse ja tabeli päriluse kohta. |
Avaldise tehtemärgid: is ja päriluse seisuga |
| ühinema | Tabelid ühendatakse mõlema tabeli ühiste veergudega. Saate luua ühe tulemikomplekti mitme tabeli põhjal, kasutades ühendusi. | Vali lause süntaks |
| nagu | Kontrollib vasteid mustri järgi metamärkidega *ja ?. | Relatsioontehtemärgid |
| maxof | Tagastab klausliga määratud ridade väljade maksimumi group by . |
Vali lause süntaks |
| minof | Tagastab klausliga määratud ridade väljade miinimumi group by . |
Vali lause süntaks |
| Mod | Tagastab vasaku avaldise1 täisarvulise jäägi, mis on jagatud parempoolse avaldisega2. Mitteametlikult nimetatakse seda vahel mooduloperaatoriks.
(12 mod 7) == 5 on tõsi. |
|
| uus | Operaator. Loob klassi eksemplari või eraldab massiivile mälu. | |
| järgmine | Toob tabeli järgmise kirje või kutsub järgmise meetodi käsujärjestuses. | |
| noFetch | Näitab, et ühtegi kirjet ei tohi praegu tuua. | Vali lause süntaks |
| notExists |
join Kasutatakse lausetes select klauslitega. |
Vali lause süntaks |
| null | Sümboolne konstant. | |
| optimisticLock | Sunnib lauset käitama optimistliku samaaegsuse juhtelemendiga, isegi kui tabelis on määratud mõni muu väärtus. | Vali lause süntaks |
| tellimus | Osa order by lause klauslist select . |
Vali lause süntaks |
| Välimine | välist ühendamist. | Vali lause süntaks |
| Paus | Peatab töö täitmise. Kasutajal palutakse määrata, kas käivitamine peaks jätkuma. Seda lauset ei tohiks tootmiskoodis kasutada. | Vali laused |
| pessimisticLock | Sunnib lauset käitama pessimistliku samaaegsuse juhtelemendiga, isegi kui tabelile on määratud mõni muu väärtus. | Vali lause süntaks |
| trükkima | Võimaldab kuvada ekraanil väljundi. Seda lauset ei tohiks tootmiskoodis kasutada. | Prindi laused |
| era | Meetodi juurdepääsu muutefunktsiooni. Seda meetodit saab kasutada ainult meetodi deklareerivas klassis. | Meetodi juurdepääsu reguleerimine |
| Kaitstud | Meetodi juurdepääsu muutefunktsiooni. Meetodit võib kasutada meetodite deklareerimise klassis ja tuletatud klassides. | Meetodi juurdepääsu reguleerimine |
| avalik | Meetodi juurdepääsu muutefunktsiooni. Selle meetodi võib kutsuda mis tahes klassist. | Meetodi juurdepääsu reguleerimine |
| tõeline |
real Määrab tüübi, kümnendtüübi ilma ümardamistõrgeteta. |
Realid |
| repeatableRead | Määrab, et ükski teine kanne ei saa muuta andmeid, mida on praeguses kandes loogika järgi loetud, kuni praegune kanne on lõpule viidud. Selgesõnaline tehing viiakse lõpule kas ttsAbortis või äärepoolseimas ttsCommitis. Autonoomse valikuväljavõtte puhul on tehingu kestus valikukäsu kestus. Siiski jõustab andmebaas mõnikord üksikutes valikulauseteskorduva lugemise ekvivalendi ka ilma seda märksõna X++ koodis kuvamata (sõltuvalt sellest, kuidas andmebaas otsustab tabeleid skannida). | Lisateavet leiate aluseks oleva relatsioonandmebaasi toote dokumentatsioonist. |
| Uuesti | Kasutatakse erandite töötlemisel. | Erandi käsitlemine katsega ja märksõnade püüdmine |
| Tagasi | Tagastab meetodi. | Meetodite deklareerimine |
| Vastupidine | Kirjed tagastatakse pöördjärjestuses. | Vali lause süntaks |
| valima | Klausel select määrab, millised veerud või vaated tulemikomplektis kuvatakse. |
Vali laused |
| server | Meetodi muutefunktsiooni. Seda muutefunktsiooni ignoreeritakse ja seda ei tohiks kasutada, kuna kõik meetodid käivitatakse serveri poolel. | Meetodi muutefunktsioonid |
| Millega | Kasutatakse käsuga update_recordset . | update_recordset |
| Staatiline | Staatilised meetodid ei tohi viidata eksemplarimuutujatele (ainult staatilistele muutujatele); käivitamiseks võib kasutada klassi nime, mitte klassi eksemplari ("MyClass.aStaticProcedure"). |
Meetodi muutefunktsioonid |
| Str |
string Määrab tüübi. |
Stringid |
| Summa | Tagastab lauses klausliga group byselect määratud ridade väljade summa. |
Vali lause süntaks |
| Super | Kutsub praeguse meetodiga alistatud meetodi. | Tabelimeetodid |
| lüliti | Vaheta lauset. | Lausete vahetamine |
| tableLock | Aegunud; tableLock pole enam saadaval. | |
| see | Viide klassi praegusele eksemplarile. Kasutatakse X++ koodis klassi eksemplarimeetodis. Kasutatakse klassi meetodiliikmetele viitamiseks. | |
| Viska | Kasutatakse erandite töötlemisel. | Erandi käsitlemine katsega ja märksõnade püüdmine |
| Tõsi | Kahendsõnaline. | Kahendmuutujad |
| proovima | Kasutatakse erandite töötlemisel. | Erandi käsitlemine katsega ja märksõnade püüdmine |
| ttsAbort | Saate tagasi pöörata (st hüljata) kõik praeguse kande muudatused. | Tehingu terviklus |
| ttsBegin | Tähistab tehingu algust. | Tehingu terviklus |
| ttsCommit | Tähistab tehingu lõppu, kinnitades tabelites tehtud muudatused. | Tehingu terviklus |
| update_recordset | Lubab reakomplektide töötlemist ühes toimingus. | update_recordset |
| validTimeState | Filtreerib read, mis tuuakse kehtivast ajaoleku tabelist X++ SQL-lausega select . Näiteks : select validTimeState(myDateEffective) * from xMyTable; ... või... select validTimeState(myDateFrom, myDateTo) * üksusest xMyTable; |
Sobivate ajaoleku tabelite mõju lugemis- ja kirjutamistoimingutele |
| Tühine | Tuvastab meetodi, mis ei tagasta väärtust. | Meetodite deklareerimine |
| kus | Osa lausest select . Klausel where määrab tingimused, mis peavad olema täidetud, st read, mida soovite tulemisse kaasata. |
Vali lause süntaks |
| Kuigi | Iteratsiooniavaldus. Käivitab lause korduvalt, kui testtingimus on tõene. | Tsüklite ajal lausete valimine |
| aken | Võimaldab muuta väljundakna suurust. Kasutatakse prindi-/prindilausetega<>, mis pole tootmiskoodis soovitatavad. |
Prindi laused |
Avaldiste süntaks
X++ avaldist kasutatakse matemaatilisel või loogilisel viisil. Avaldised põhinevad keele andmetüüpidel; st avaldis tagastab alati teatud tüüpi väärtuse. Seda väärtust saab kasutada arvutustes, määrangutes, tingimuslausetes jne.
EBNF – X++ avaldiste kirjeldus
| Mõiste | Määratlus | |
|---|---|---|
| Avaldis | = | Lihtavaldis [RelationalOperator Simple-expression ] |
| RelationalOperator | = | = |
| Lihtavaldis | = | Lihtavaldis [ + |
| Mõiste | = | Compfactor { Mult-operator CompFactor } |
| Mult-operator | = | * |
| CompFactor | = | [ ! ] [ - |
| Tegur | = | Sõnasõnaline |
| Loend | = | EnumName :: Literal |
| Muutuja | = | Identifikaator [ [ Avaldis ] ] [ . Avaldis ] |
| FunctionCall | = | [ Avaldis (. |
| If-expression | = | Avaldis? Avaldis : Avaldis |
Eelmise süntaksi puhul kehtivad semantilised piirangud. Tehtemärgiga :: ei saa helistada ühelegi meetodile. Samuti ei saa te seda märksõna kasutada ilma aktiivse objektita; st kui te pole eksemplari meetodis jne.
Näited
| Avaldise näide | Kirjeldus |
|---|---|
1 |
Täisarvuline literaal. |
| NoYes::No | Loendusviide. |
A |
Muutujaviide. |
| Võlgnik::Find("1") | Staatiline meetodikutse (tagastab kliendimuutuja). |
| (A > 3 ? true : false) | If-avaldis, mis tagastab tõese või väära väärtuse. |
| (Valige CustTable, kus CustTable.Account == "100"). NameRef | Valikuavaldis. Tagastab klienditabeli välja nameref. See on string. |
| A >= B | Loogiline avaldis. Tagastab väärtuse tõene või väär. |
| A + B | Aritmeetiline avaldis. Liidetakse A ja B. |
| A + B / C | Arvutab B/C ja lisab selle A-le. |
| ~A + see. Väärtus() | Summeerib binaarkuju not A ja meetodikutse väärtuse tulemi ulatuse objektil (see). |
| Võlgnik::Find("1"). NameRef | Tagastab leitud kliendikirje välja NameRef. |
| Võlgnik::Find("1"). Saldo() | Meetodikutse Balance klienditabelis (võlgnik::Find tagastab kliendi). Tagastab kliendi saldo kontonumbriga 1. |
EBNF-i ülevaade
Extended Backus Naur Form (EBNF) on metallikeel ja seda kasutatakse selles juhendis keelesüntaksi kirjeldamiseks. EBNFi määratlus koosneb tootmiseeskirjadest, mittemääratlustest ja terminalidest. Võtmeterminid kuvatakse järgmises tabelis.
| Põhimõisted | Näide | Kirjeldus |
|---|---|---|
| Terminalid | Work_Team | Terminal on üks märk või märgijada, mis ei muutu kunagi. |
| Mitteterminaalid | Employee |
Mitteterminaalne on keele kehtiva lause osa kirjeldus, mis on määratletud tootmisreegli või tekstilise kirjeldusega. Mitteterminaalset sümbolit saab alati laiendada ühe või mitme terminali sümbolini. |
| Tootmisreeglid | Töötaja = arendaja | Tester |
Näide
Work_Team = ülemuse töötaja {, töötaja} töötaja = arendaja | Tester Selles näites määratletakse Work_Team, mis koosneb Manager ühest või mitmest Employees. A Employee on määratletud kui i Developervõi Tester. Näites kasutatud sümboleid kirjeldatakse järgmises tabelis.
Erisümbolid EBNF-is
| Sümbol | Kirjeldus |
|---|---|
| (Avaldis) | Sulgudes on sümbolid (terminalid ja mitteterminaalid). Neid saab paigutada tootmisreegli paremas servas. |
| Avaldis1 | Avaldis2 |
| [Avaldis] | Valikuline: üksused vahemikus [ ja ] on valikulised. Kõik nurksulgudes olevad üksused või mitte ükski neist pole kaasatud. |
| {Expression} | Korda: üksused vahemikus { kuni } on valikulised, kuid neid saab korrata nii mitu korda kui vaja. |
Näiteks kui jalgratta jaoks ostetavad tarvikud koosnevad sadul- ja veepudelihoidjatest, kelladest ja sarvedest ning teil võib olla kas kell või sarv ja null, üks või mitu veepudelihoidjat ja täpselt üks sadul, võib seda väljendada järgmiselt: Bicycle_Accessories = sarv [kell | sarv] {water_bottle_holders} See grammatika määratleb järgmised võimalused: saddlesaddle bellsaddle horn sadul water_bottle_holder sadul kell water_bottle_holder sadul kell water_bottle_holder water_bottle_holder Jne.
X++ grammatika
Selles artiklis kirjeldatakse X++ keele ametlikku grammatikat.
Kuidas tõlgendada ametlikku BNF-grammatikat?
Selles jaotises kirjeldatakse X++ grammatikat Backus Nauri vormil (BNF). Siin on kirjeldatud väikest BNF-i näidet.
AA ::= BB CC_SYM
BB ::= JJ_SYM
::= KK_SYM
AA on tootmisreegli nimi. Selleks AA on vaja i BBja seejärel CC_SYM. A BB on ka tootmisreegel.
BB Seetõttu pole see terminal.
BB peab olema kas JJ_SYM või KK_SYM. Nii JJ_SYM kui ka KK_SYM on terminalid, kuna need pole muude tootmisreeglite nimed. CC_SYM on samuti terminal.
BNF-is X++ grammatika jaoks on enamik terminale _SYM oma nime järelliitena.
Ametlik X++ grammatika BNF-is
Selles jaotises on BNF, mis määratleb X++-i grammatika.
CMPL_UNIT ::= RETTYPEID FUNC_HDR FUNC_HEAD BODY
::= RETTYPEID DATA_HDR CLASS_DECL
::= EXPR_HDR IF_EXPR SEMIOPT
::= RETTYPEID FUNC_HDR EVENT_DECL BODY
SEMIOPT ::= SEMICOLON_SYM
::=
CLASS_DECL ::= CLASS_HEADER LEFTBR_SYM DCL_EVENTMAP DCL_LIST RIGHTBR_SYM
CLASS_HEADER ::= ATTRIBUTE_DEF CLASS_MODIFIERS CLASSORINTERFACE STD_ID EXTENDS IMPLEMENTS
ATTRIBUTE_DEF ::= LEFT_BRKT_SYM ATTRIBUTE_INIT ATTRIBUTE_LIST RETTYPEID RGHT_BRKT_SYM
::=
ATTRIBUTE_INIT ::=
.
ATTRIBUTE_LIST ::= ATTRIBUTE
::= ATTRIBUTE_LIST LIST_SEP_SYM ATTRIBUTE
ATTRIBUTE ::= STD_ID
::= ATTRIBUTE_WITH_ARGS_BEGINS ATTRIBUTE_WITH_ARGS_ENDS
ATTRIBUTE_WITH_ARGS_BEGINS ::= STD_ID LEFT_PAR_SYM
ATTRIBUTE_WITH_ARGS_ENDS ::= ATTRIBUTE_ARGS RGHT_PAR_SYM
ATTRIBUTE_ARGS ::= ATTRIBUTE_CONSTANT
::= ATTRIBUTE_ARGS LIST_SEP_SYM ATTRIBUTE_CONSTANT
ATTRIBUTE_CONSTANT ::= INT_SYM
::= DBL_SYM
::= STR_SYM
::= DATE_SYM
::= DATETIME_SYM
::= STD_ID DBLCOLON_SYM STD_ID
::= TRUE_SYM
::= FALSE_SYM
::= INT64_SYM
::= ATTRIBUTE_INTRINSIC
ATTRIBUTE_INTRINSIC ::= INTRI_ID LEFT_PAR_SYM IARGS RGHT_PAR_SYM
CLASSORINTERFACE ::= CLASS_SYM
::= INTERFACE_SYM
CLASS_MODIFIERS ::= CLASS_MODS
::=
CLASS_MODS ::= CLASS_MODIFIER
::= CLASS_MODS RETTYPEID CLASS_MODIFIER
CLASS_MODIFIER ::= PUBLIC_SYM
::= FINAL_SYM
::= STATIC_SYM
::= ABSTRACT_SYM
::= PRIVATE_SYM
EXTENDS ::= EXTENDS_SYM STD_ID
::=
IMPLEMENTS ::= IMPLEMENTS_SYM IMPLEMENTLIST
::=
IMPLEMENTLIST ::= STD_ID
::= IMPLEMENTLIST LIST_SEP_SYM STD_ID
DCL_EVENTMAP ::=
EVENT_DECL ::= ATTRIBUTE_DEF EVENT_HEADER PARM_DCL_LIST
EVENT_HEADER ::= EVENT_MODIFIER VOID_TYPE_SYM STD_ID
EVENT_MODIFIER ::= EVENT_SYM
FUNC_HEAD ::= ATTRIBUTE_DEF FUNCNAME PARM_DCL_LIST
FUNCNAME ::= FUNCTYPE STD_ID
FUNCTYPE ::= FUNC_MODIFIERS DECL_TYPE
FUNC_MODIFIERS ::= FUNC_MODS
::=
FUNC_MODS ::= RETTYPEID FUNC_MODIFIER
::= FUNC_MODS RETTYPEID FUNC_MODIFIER
FUNC_MODIFIER ::= PUBLIC_SYM
::= PRIVATE_SYM
::= PROTECTED_SYM
::= FINAL_SYM
::= STATIC_SYM
::= ABSTRACT_SYM
::= DISPLAY_SYM
::= EDIT_SYM
::= SERVER_SYM
::= CLIENT_SYM
BODY ::= LEFTBR_SYM DCL_FUNC_LIST SEMIOPT SECAUTHZCHECK STMTLIST SECAUTHZEND RIGHTBR_SYM
SECAUTHZCHECK ::=
SECAUTHZEND ::=
RETTYPEID ::=
FUNCTION_DEF ::= FUNC_HEADER PARM_DCL_LIST LOCAL_BODY
FUNC_HEADER ::= DECL_TYPE STD_ID
PARM_DCL_LIST ::= RETTYPEID PARM_START PARM_LIST_OPT RGHT_PAR_SYM RETTYPEID
PARM_START ::= LEFT_PAR_SYM
PARM_LIST_OPT ::= PARM_LIST
::=
PARM_LIST ::= DCL_INIT
::= PARM_LIST LIST_SEP_SYM DCL_INIT
LOCAL_BODY ::= LEFTBR_SYM DCL_LIST SEMIOPT STMTLIST RETTYPEID RIGHTBR_SYM
DCL_LIST ::= DCL_LIST2
::=
DCL_LIST2 ::= DCL_STMT
::= DCL_LIST2 DCL_STMT
DCL_FUNC_LIST ::= DCL_FUNC_LIST2
::=
DCL_FUNC_LIST2 ::= DCL_STMT
::= FUNCTION_DEF
::= DCL_FUNC_LIST2 DCL_STMT
::= DCL_FUNC_LIST2 FUNCTION_DEF
DCL_STMT ::= DCL_INIT_LIST RETTYPEID SEMICOLON_SYM
DCL_INIT_LIST ::= DCL_INIT
::= DCL_CLIST ASG_CLAUSE
DCL_CLIST ::= DCL_INIT_LIST LIST_SEP_SYM STD_ID ARR_DCL_IDX
DCL_INIT ::= DECL ASG_CLAUSE
DECL ::= DECL_TYPE STD_ID ARR_DCL_IDX
DECL_TYPE ::= STR_TYPE_SYM STR_LEN
::= INT_TYPE_SYM
::= DBL_TYPE_SYM
::= DATE_TYPE_SYM
::= DATETIME_TYPE_SYM
::= TYPE_ID
::= QUEUE_TYPE_SYM
::= VOID_TYPE_SYM
::= ANY_TYPE_SYM
::= GUID_TYPE_SYM
::= INT64_TYPE_SYM
::= CLR_TYPE
CLR_TYPE ::= CLR_NAMESPACE TYPE_ID CLR_ARRAY_TYPE_EXT
::= CLR_NAMESPACE CLR_TYPE
CLR_NAMESPACE ::= TYPE_ID PERIOD_SYM
CLR_ARRAY_TYPE_EXT ::= CLR_ARRAY_SPEC
::=
CLR_ARRAY_SPEC ::= CLR_ARRAY_PART
::= CLR_ARRAY_SPEC CLR_ARRAY_PART
CLR_ARRAY_PART ::= CLR_ARRAY_LEFT_PART CLR_RECTANGULAR_LIST RGHT_BRKT_SYM
CLR_ARRAY_LEFT_PART ::= LEFT_BRKT_SYM
CLR_RECTANGULAR_LIST ::= CLR_COMMA_LIST
::=
CLR_COMMA_LIST ::= LIST_SEP_SYM
::= CLR_COMMA_LIST LIST_SEP_SYM
STR_LEN ::= INT_SYM
::=
ARR_DCL_IDX ::= LEFT_BRKT_SYM RANGE ARRAY_MEM RGHT_BRKT_SYM
::=
RANGE ::= IF_EXPR
::=
ARRAY_MEM ::= LIST_SEP_SYM IF_EXPR
::=
ASG_CLAUSE ::= INIT_START IF_EXPR
::=
INIT_START ::= ASG_SYM
ASG_STMT ::= LVAL_FLD ASSIGN IF_EXPR
::= LVAL_LIST ASG_SYM IF_EXPR
::= LVAL_FLD ASG_INC_DEC
::= ASG_INC_DEC LVAL_FLD
::= LVAL_FLD ASG_EVENT_HANDLER
ASSIGN ::= ASG_SYM
::= ASGINC_SYM
::= ASGDEC_SYM
ASG_INCDEC ::= ASGINC_SYM
::= ASGDEC_SYM
ASG_EVENT_HANDLER ::= ASG_INCDEC EVENTHANDLER_SYM LEFT_PAR_SYM QUALIFIER STD_ID RGHT_PAR_SYM
::= ASG_INCDEC EVENTHANDLER_SYM LEFT_PAR_SYM STD_ID DBLCOLON_SYM STD_ID RGHT_PAR_SYM
::= ASG_INCDEC EVENTHANDLER_SYM LEFT_PAR_SYM QUALIFIER EVAL_CLR_TYPE DBLCOLON_SYM STD_ID RGHT_PAR_SYM
ASG_INC_DEC ::= INC_SYM
::= DEC_SYM
LVAL_FLD ::= FIELD
LVAL_START ::= LEFT_BRKT_SYM
LVAL_LIST ::= LVAL_START LVALUES RGHT_BRKT_SYM
LVALUE ::= FIELD
LVALUES ::= LVALUE
::= LVALUES NEXTLVAL LVALUE
NEXTLVAL ::= LIST_SEP_SYM
IF_EXPR ::= COND_TRUE IF_EXPR
::= BOOL_EXPR
COND_TRUE ::= COND_TEST IF_EXPR COLON_SYM
COND_TEST ::= BOOL_EXPR QUEST_SYM
BOOL_EXPR ::= BOOL_EXPR LOGOP EXPR
::= EXPR
LOGOP ::= AND_SYM
::= OR_SYM
EXPR ::= SMPL_EXPR RELOP SMPL_EXPR
::= SMPL_EXPR AS_SYM STD_ID
::= SMPL_EXPR IS_SYM STD_ID
::= SMPL_EXPR AS_SYM EVAL_CLR_TYPE
::= SMPL_EXPR IS_SYM EVAL_CLR_TYPE
::= SMPL_EXPR
RELOP ::= LT_SYM
::= LE_SYM
::= EQ_SYM
::= NE_SYM
::= GT_SYM
::= GE_SYM
::= LIKE_SYM
SMPL_EXPR ::= SMPL_EXPR ADDOP TERM
::= TERM
ADDOP ::= PLUS_SYM
::= MINUS_SYM
::= PHYSOR_SYM
TERM ::= TERM MULOP CMPL_FACT
::= CMPL_FACT
MULOP ::= MULT_SYM
::= DIV_SYM
::= MOD_SYM
::= INTDIV_SYM
::= SHIFTL_SYM
::= SHIFTR_SYM
::= PHYSAND_SYM
::= PHYSXOR_SYM
CMPL_FACT ::= NOT_SYM SGND_FACT
::= SGND_FACT
SGND_FACT ::= SIGNOP FACTOR
::= FACTOR
SIGNOP ::= UMINUS_SYM
::= PHYSNOT_SYM
FACTOR ::= LEFT_PAR_SYM IF_EXPR RGHT_PAR_SYM
::= CONSTANT
::= FIELD
::= DIRSEARCH
::= FUNCTION
::= INTRINSICS
::= EVAL
::= CONLITTERAL
::= NEW_CLR_ARRAY
NEW_CLR_ARRAY ::= NEW_SYM EVAL_CLR_TYPE NEW_CLR_ARRAY_PART LEFT_PAR_SYM RGHT_PAR_SYM
NEW_CLR_ARRAY_PART ::= CLR_SIZED_ARRAY CLR_NOSIZED_ARRAY_SPEC
CLR_SIZED_ARRAY ::= LEFT_BRKT_SYM CLR_SMPL_EXPR_COMMA_LIST RGHT_BRKT_SYM
CLR_SMPL_EXPR_COMMA_LIST ::= SMPL_EXPR
::= CLR_SMPL_EXPR_COMMA_LIST LIST_SEP_SYM SMPL_EXPR
CLR_NOSIZED_ARRAY_SPEC ::= CLR_NOSIZED_ARRAY_LIST
::=
CLR_NOSIZED_ARRAY_LIST ::= CLR_NOSIZED_ARRAY
::= CLR_NOSIZED_ARRAY_LIST CLR_NOSIZED_ARRAY
CLR_NOSIZED_ARRAY ::= LEFT_BRKT_SYM CLR_EMPTY_COMMA_LIST RGHT_BRKT_SYM
CLR_EMPTY_COMMA_LIST ::= CLR_EMPTY_RECT_COMMA_LIST
::=
CLR_EMPTY_RECT_COMMA_LIST ::= LIST_SEP_SYM
::= CLR_EMPTY_RECT_COMMA_LIST LIST_SEP_SYM
CONLITTERAL ::= LEFT_BRKT_SYM IF_EXPR EXPR_LIST RGHT_BRKT_SYM
CONSTANT ::= INT_SYM
::= DBL_SYM
::= STR_SYM
::= DATE_SYM
::= DATETIME_SYM
::= STD_ID DBLCOLON_SYM STD_ID
::= TRUE_SYM
::= FALSE_SYM
::= NULL_SYM
::= INT64_SYM
::= QUALIFIER EVAL_CLR_TYPE DBLCOLON_SYM STD_ID
::= QUALIFIER STD_ID DBLCOLON_SYM STD_ID
DIRSEARCH ::= DIRS_HEADER PERIOD_SYM STD_ID ARR_IDX
::= DIRS_HEADER PERIOD_SYM FLD_NUM ARR_IDX
DIRS_HEADER ::= LEFT_PAR_SYM SET_DIRS FIND_JOIN RGHT_PAR_SYM
SET_DIRS ::=
FIELD ::= QUALIFIER STD_ID ARR_IDX
::= QUALIFIER FLD_NUM ARR_IDX
::= STD_ID ARR_IDX
QUALIFIER ::= EVAL PERIOD_SYM
::= STD_ID PERIOD_SYM
FLD_NUM ::= LEFT_PAR_SYM IF_EXPR RGHT_PAR_SYM
ARR_IDX ::= LEFT_BRKT_SYM SMPL_EXPR RGHT_BRKT_SYM
::=
EXPR_LIST ::= EXPR_LIST2
::=
EXPR_LIST2 ::= LIST_SEP_SYM IF_EXPR
::= EXPR_LIST2 LIST_SEP_SYM IF_EXPR
FUNCTION ::= FUNC_ID LEFT_PAR_SYM EVAL_FUNCTION_NAME PAR_LIST RGHT_PAR_SYM
EVAL_FUNCTION_NAME ::=
EVAL_NAME ::= EVAL_ID LEFT_PAR_SYM
::= STD_ID LEFT_PAR_SYM
::= STD_ID DBLCOLON_SYM STD_ID LEFT_PAR_SYM
::= SUPER_SYM LEFT_PAR_SYM
::= NEW_SYM STD_ID LEFT_PAR_SYM
::= NEW_SYM EVAL_CLR_TYPE LEFT_PAR_SYM
::= QUALIFIER EVAL_CLR_TYPE DBLCOLON_SYM STD_ID LEFT_PAR_SYM
::= QUALIFIER STD_ID LEFT_PAR_SYM
::= QUALIFIER STD_ID DBLCOLON_SYM STD_ID LEFT_PAR_SYM
EVAL_CLR_TYPE ::= NAMESPACE STD_ID
::= NAMESPACE EVAL_CLR_TYPE
NAMESPACE ::= STD_ID PERIOD_SYM
EVAL ::= EVAL_NAME PAR_LIST RGHT_PAR_SYM
PAR_LIST ::= PRM_LIST
::=
PRM_LIST ::= PAR_ELEM
::= PRM_LIST LIST_SEP_SYM PAR_ELEM
PAR_ELEM ::= IF_EXPR
::= BYREF_SYM FIELD
INTRINSICS ::= INTRI_ID LEFT_PAR_SYM IARGS RGHT_PAR_SYM
IARGS ::= STD_ID
::= STR_SYM
::= STD_ID LIST_SEP_SYM STD_ID
::=
STMTLIST ::= STATEMENTS
::=
STATEMENTS ::= STATEMENT
::= STATEMENTS STATEMENT
STATEMENT ::= COMPOUND_STMT
::= WHILE_STMT
::= FOR_STMT
::= DO_STMT
::= SEARCH_STMT
::= FIND_STMT
::= PRINT_STMT
::= WINDOW_STMT
::= IF_STMT
::= SWITCH_STMT
::= EXPR_STMT
::= PAUSE_STMT
::= BP_CLAUSE
::= BREAK_STMT
::= CONTINUE_STMT
::= RETURN_CLAUSE
::= MOVE_REC_STMT
::= THROW_STMT
::= TRY_STMT
::= RETRY_STMT
::= TTS_STMT
::= FLUSH_STMT
::= TBLLOCK_STMT
::= CHANGE_STMT
::= UPDATE_STMT
::= INSERT_STMT
::= UNCHECKED_STMT
COMPOUND_STMT ::= LEFTBR_SYM STMTLIST RIGHTBR_SYM
THROW_STMT ::= THROW_SYM IF_EXPR SEMICOLON_SYM
TRY_STMT ::= TRY_BLOCK CATCH_LIST
TRY_BLOCK ::= TRY_START STATEMENT
TRY_START ::= TRY_SYM
CATCH_LIST ::= CATCH_STMT
::= CATCH_LIST CATCH_STMT
CATCH_STMT ::= CATCH_EXPR PRE_CATCH STATEMENT POST_CATCH
CATCH_EXPR ::= CATCH_SYM LEFT_PAR_SYM IF_EXPR RGHT_PAR_SYM
::= CATCH_SYM LEFT_PAR_SYM IF_EXPR LIST_SEP_SYM TABLEINSTANCE RGHT_PAR_SYM
::= CATCH_SYM
PRE_CATCH ::=
POST_CATCH ::=
TABLEINSTANCE ::= INSTANCENAME
INSTANCENAME ::= QUALIFIER STD_ID ARR_IDX
::= STD_ID ARR_IDX
RETRY_STMT ::= RETRY_SYM SEMICOLON_SYM
WHILE_STMT ::= WHILE_TEST STATEMENT
WHILE_TEST ::= WHILE LEFT_PAR_SYM IF_EXPR RGHT_PAR_SYM
WHILE ::= WHILE_SYM
DO_STMT ::= DO_BODY DO_TEST SEMICOLON_SYM
DO_BODY ::= DO_HEADER STATEMENT
DO_HEADER ::= DO_SYM
DO_TEST ::= WHILE_SYM LEFT_PAR_SYM IF_EXPR RGHT_PAR_SYM
FOR_STMT ::= FOR_HEADER STATEMENT
FOR_HEADER ::= FOR_TEST SEMICOLON_SYM FOR_ASG RGHT_PAR_SYM
FOR_TEST ::= FOR_INIT SEMICOLON_SYM IF_EXPR
FOR_INIT ::= FOR_SYM LEFT_PAR_SYM FOR_ASG
FOR_ASG ::= LVAL_FLD ASSIGN IF_EXPR
::= LVAL_FLD ASG_INC_DEC
::= ASG_INC_DEC LVAL_FLD
JOIN_LIST ::= JOIN_SPECS
::=
JOIN_SPECS ::= JOIN_SPEC
::= JOIN_SPECS JOIN_SPEC
JOIN_SPEC ::= JOIN_ORDER WHERE IF_EXPR
::= JOIN_ORDER
JOIN_ORDER ::= JOIN_USING
::= JOIN_USING ORDER_GROUP
JOIN_USING ::= JOIN_CLAUSE USING_INDEX STD_ID
::= JOIN_CLAUSE USING_INDEX HINT_SYM STD_ID
::= JOIN_CLAUSE
JOIN_CLAUSE ::= OUTER JOIN_SYM SELECTOPT TABLE
OUTER ::= OUTER_SYM
::= EXISTS_SYM
::= NOTEXISTS_SYM
::=
SEARCH_STMT ::= SEARCH_JOIN STATEMENT
SEARCH_JOIN ::= SEARCH_WHERE JOIN_LIST
SEARCH_WHERE ::= SEARCH_ORDER WHERE IF_EXPR
::= SEARCH_ORDER
WHERE ::= WHERE_SYM
SUM_ELEM ::= SUM_FUNC LEFT_PAR_SYM STD_ID RGHT_PAR_SYM
SUM_FUNC ::= SUM_SYM
::= AVG_SYM
::= CNT_SYM
::= MINOF_SYM
::= MAXOF_SYM
SEARCH_ORDER ::= SEARCH_USING
::= SEARCH_USING ORDER_GROUP
ORDER_GROUP ::= ORDERBY_CLAUSE OPT_GROUPBY
::= GROUPBY_CLAUSE OPT_ORDERBY
OPT_GROUPBY ::= GROUPBY_CLAUSE
::=
OPT_ORDERBY ::= ORDERBY_CLAUSE
::=
ORDERBY_CLAUSE ::= ORDER_SYM OPT_BY ORDER_ELEM
::= ORDERBY_CLAUSE LIST_SEP_SYM ORDER_ELEM
GROUPBY_CLAUSE ::= GROUP_SYM OPT_BY ORDER_ELEM
::= GROUPBY_CLAUSE LIST_SEP_SYM ORDER_ELEM
ORDER_ELEM ::= STD_ID INDEX DIRECTION
::= ORDER_QUALIFIER STD_ID INDEX DIRECTION
ORDER_QUALIFIER ::= STD_ID PERIOD_SYM
INDEX ::= LEFT_BRKT_SYM INT_SYM RGHT_BRKT_SYM
::=
DIRECTION ::= ASCEND_SYM
::= DESCEND_SYM
::=
OPT_BY ::= BY_SYM
::=
SEARCH_USING ::= SEARCH_CLAUSE USING_INDEX STD_ID
::= SEARCH_CLAUSE USING_INDEX HINT_SYM STD_ID
::= SEARCH_CLAUSE
USING_INDEX ::= INDEX_SYM
SEARCH_CLAUSE ::= WHILE_SYM SELECT_SYM SELECTOPT CROSSCOMPANY_CLAUSE VALIDTIMESTATE_CLAUSE TABLE
CROSSCOMPANY_CLAUSE ::= CROSSCOMPANY_SYM
::= CROSSCOMPANY_SYM COLON_SYM STD_ID
::=
VALIDTIMESTATE_CLAUSE ::= VALIDTIMESTATE_SYM LEFT_PAR_SYM STD_ID LIST_SEP_SYM STD_ID RGHT_PAR_SYM
::= VALIDTIMESTATE_SYM LEFT_PAR_SYM STD_ID RGHT_PAR_SYM
::=
SELECTOPT ::=
::= SELECTOPT REVERSE_SYM
::= SELECTOPT FIRSTFAST_SYM
::= SELECTOPT FIRSTONLY_SYM
::= SELECTOPT FIRSTONLY_SYM1
::= SELECTOPT FIRSTONLY_SYM10
::= SELECTOPT FIRSTONLY_SYM100
::= SELECTOPT FIRSTONLY_SYM1000
::= SELECTOPT FORUPDATE_SYM
::= SELECTOPT NOFETCH_SYM
::= SELECTOPT FORCE_SELECT_ORDER_SYM
::= SELECTOPT FORCE_NESTED_LOOP_SYM
::= SELECTOPT FORCE_LITERALS_SYM
::= SELECTOPT FORCE_PLACEHOLDERS_SYM
::= SELECTOPT REPEATABLEREAD_SYM
::= SELECTOPT OPTIMISTICLOCK_SYM
::= SELECTOPT PESSIMISTICLOCK_SYM
::= SELECTOPT GENERATEONLY_SYM
FIND_STMT ::= FIND_JOIN SEMICOLON_SYM
FIND_JOIN ::= FIND_WHERE JOIN_LIST
FIND_WHERE ::= FIND_ORDER WHERE IF_EXPR
::= FIND_ORDER
FIND_ORDER ::= FIND_USING
::= FIND_USING ORDER_GROUP
FIND_USING ::= FIND_TABLE USING_INDEX STD_ID
::= FIND_TABLE USING_INDEX HINT_SYM STD_ID
::= FIND_TABLE
FIND_TABLE ::= SELECT_SYM SELECTOPT CROSSCOMPANY_CLAUSE VALIDTIMESTATE_CLAUSE TABLE
::= DELETE_SYM SELECTOPT CROSSCOMPANY_CLAUSE VALIDTIMESTATE_CLAUSE TABLE
TABLE ::= FLD_LIST OPT_FROM
FLD_LIST ::= MULT_SYM
::= FIELD_LIST
FIELD_LIST ::= FIELD_SPEC
::= FIELD_LIST LIST_SEP_SYM FIELD_SPEC
FIELD_SPEC ::= STD_ID INDEX
::= SUM_ELEM
OPT_FROM ::= FROM_SYM STD_ID
::=
SETFIELDSMODE ::=
UPDATE_STMT ::= UPDATETABLE SET_SYM SETFIELDSMODE FIELDASSIGNMENTS OPT_WHERE JOIN_LIST SEMICOLON_SYM
UPDATETABLE ::= UPDATE_SYM SELECTOPT CROSSCOMPANY_CLAUSE STD_ID
OPT_WHERE ::= WHERE IF_EXPR
::=
FIELDASSIGNMENTS ::= FIELDASSIGNMENTS LIST_SEP_SYM FIELDASSIGNMENT
::= FIELDASSIGNMENT
FIELDASSIGNMENT ::= STD_ID INDEX ASG_SYM IF_EXPR
INSERT_PART ::= INSERT_SYM CROSSCOMPANY_CLAUSE INSERT_NAME LEFT_PAR_SYM INSERTFIELDLIST RGHT_PAR_SYM
INSERT_NAME ::= STD_ID
INSERT_STMT ::= INSERT_PART FIND_JOIN SEMICOLON_SYM
INSERTFIELDLIST ::= INSERTFIELD
::= INSERTFIELDLIST LIST_SEP_SYM INSERTFIELD
INSERTFIELD ::= STD_ID INDEX
PRINT_STMT ::= PRINT_CLAUSE AT_CLAUSE SEMICOLON_SYM
PRINT_CLAUSE ::= PRINT IF_EXPR EXPR_LIST
PRINT ::= PRINT_SYM
AT_CLAUSE ::= AT_SYM IF_EXPR LIST_SEP_SYM IF_EXPR
::=
WINDOW_STMT ::= WINDOW_SYM IF_EXPR LIST_SEP_SYM IF_EXPR AT_CLAUSE SEMICOLON_SYM
IF_STMT ::= ELSE_STMT
::= IF_CONDS
IF_CONDS ::= IF_COND STATEMENT
IF_COND ::= IF_SYM LEFT_PAR_SYM IF_EXPR RGHT_PAR_SYM
ELSE_STMT ::= ELSE STATEMENT
ELSE ::= IF_CONDS ELSE_SYM
SWITCH_STMT ::= CASE_LIST RIGHTBR_SYM
CASE_LIST ::= SWITCH_SYM LEFT_PAR_SYM IF_EXPR RGHT_PAR_SYM LEFTBR_SYM
::= CASE_TESTS STMTLIST
CASE_TESTS ::= CASE_HEADER COLON_SYM
::= CASE_LIST DEFAULT_SYM COLON_SYM
CASE_HEADER ::= CASE IF_EXPR
::= CASEALT IF_EXPR
CASE ::= CASE_LIST CASE_SYM
CASEALT ::= CASE_HEADER LIST_SEP_SYM
EXPR_STMT ::= ASG_STMT SEMICOLON_SYM
::= FUNCTION SEMICOLON_SYM
::= INTRINSICS SEMICOLON_SYM
::= EVAL SEMICOLON_SYM
PAUSE_STMT ::= PAUSE_SYM SEMICOLON_SYM
BP_CLAUSE ::= BP_SYM SEMICOLON_SYM
BREAK_STMT ::= BREAK_SYM SEMICOLON_SYM
CONTINUE_STMT ::= CONTINUE_SYM SEMICOLON_SYM
RETURN_CLAUSE ::= RETURN_SYM SEMICOLON_SYM
::= RETURN_SYM IF_EXPR SEMICOLON_SYM
TTS_STMT ::= TTSABORT_SYM SEMICOLON_SYM
::= TTSBEGIN_SYM SEMICOLON_SYM
::= TTSEND_SYM SEMICOLON_SYM
FLUSH_STMT ::= FLUSH ID_LIST SEMICOLON_SYM
FLUSH ::= FLUSH_SYM
TBLLOCK_STMT ::= TABLELOCK ID_LIST SEMICOLON_SYM
TABLELOCK ::= TABLELOCK_SYM
ID_LIST ::= STD_ID
::= ID_LIST LIST_SEP_SYM STD_ID
MOVE_REC_STMT ::= NEXT_SYM TABLE SEMICOLON_SYM
CHANGE_STMT ::= CHANGE_HEADER STATEMENT
CHANGE_HEADER ::= CHANGE LEFT_PAR_SYM IF_EXPR RGHT_PAR_SYM
CHANGE ::= CHANGECOMP_SYM
::= CHANGESITE_SYM
UNCHECKED_STMT ::= UNCHECKED_HEADER STATEMENT
UNCHECKED_HEADER ::= UNCHECKED_SYM LEFT_PAR_SYM IF_EXPR RGHT_PAR_SYM