Oharra
Orrialde honetara sartzeak baimena behar du. Saioa hasteko edo direktorioak aldatzen saia zaitezke.
Orrialde honetara sartzeak baimena behar du. Direktorioak aldatzen saia zaitezke.
Oharra
Komunitatearen interes taldeak Yammer-etik Microsoft Viva Engage-ra mugitu dira. Viva Engage komunitate batean sartzeko eta azken eztabaidetan parte hartzeko, bete Eskatu Finantza eta Eragiketak Viva Engage komunitatearen sarbidea inprimakia eta aukeratu sartu nahi duzun komunitatean.
Artikulu honek X++-ren sintaxiaren erreferentzia dauka.
X++ gako-hitzak
Ondorengo taulan agertzen diren X++ gako-hitzak erreserbatuta daude. Gako-hitz hauek ezin dira beste inolako helburuetarako erabili.
| Gordetako hitza | Azalpena | Erlazionatutako informazioa |
|---|---|---|
| ! | Ez. | Eragile erlazionalak |
| != | Desberdintasun eragilea (ez da berdina). | Eragile erlazionalak |
| # | Makroen izenen aurrizkia. | Nola erabili #define eta #if makro bat probatzeko |
| & | Binarioa eta. | Eragile aritmetikoak |
| && | Logikoa eta. | Eragile erlazionalak |
| ( | Funtzio-deiaren eragilea, funtzio-deiaren hasiera adierazten duena. | |
| ) | Funtzio-deiaren eragilea, funtzio-deiaren amaiera adierazten duena. | |
| * | Biderkatu. Izartxoa (*) X++ SQL-n ere erabiltzen da. Erabilera bat adierazpen bateko select tauletako eremu guztiak adieraztea da. Beste erabilera bat eragilearekin like komodin gisa da, edozein motatako karaktere askori 0 adierazteko. Eragileak likeere erabiltzen du ? karaktarea. |
Eragile aritmetikoak |
| ^ | XOR bitarra. | Eragile aritmetikoak |
| | | Binary OR. | Eragile aritmetikoak |
| || | Logikoa da. | Eragile erlazionalak |
| ~ | Ez. | Eragile aritmetikoak |
| + | Gainera. | Eragile aritmetikoak |
| ++ | Gehikuntza. | Esleipen-eragileak |
| += | Esleipen gehigarria. | Esleipen-eragileak |
| , | Koma operadorea. Komaz bereizitako adierazpenak sekuentzialki ezkerretik eskuinera ebaluatzen dira. | |
| - | Minus. | Eragile aritmetikoak |
| -- | Decrement operadorea. | Esleipen-eragileak |
| -= | Esleipen kentzailea. | Esleipen-eragileak |
| . | Klaseko kideen sarbide-eragilea, adibidez, formRun.run klase motako runobjektu baten metodoa sartzen duFormRun. |
|
| / | Zatitu. | Eragile aritmetikoak |
| \ | Ihes egin kateetan. Komatxo gehigarriak eta letra batzuk ihes egiten ditu, hala nola '\t' tabularako. | |
| @ | Gako-hitzen ihesa. Adibidez, var @str = 1@abstract; huts egiten du konpilatzen bere ondorengo kateak identifikatzailetzat hartzea eragiten duen karaktererik gabe @ . Kate literalei ere eragiten die, \ ihes karakterearen efektua ezeztatuz eta kateak iturburu-kodean lerro bat baino gehiago zabaltzea ahalbidetuz. Lerro berria 0x0A hamaseitarraren karaktere batez adierazten da, normalean lerro-jauzi deitzen zaiona. Ez da 0x0D hamaseitarren itzulerako karaktererik sartzen, 0x0D0A bezala. | |
| : | Bi puntu (:) karakterea instrukzioko switch maiuskulak eta minuskulak mugatzeko erabiltzen da. |
|
| :: | Metodo estatikoak (klaseak) deitzeko erabiltzen da: ClassName::methodName() eta enumerazio-literalak izendatzeko, adibidez NoYes::Yes. | |
| ; | Adierazpenak amaitzen ditu. Begiztak edo hasieratzaile, eguneratze eta balioa egiaztatzeko zatien bereizle gisa erabiltzen for da. |
|
| < | Gutxiago. | Eragile erlazionalak |
| << | Ezkerreko desplazamendua. | Eragile aritmetikoak |
| <= | Gutxiago edo berdina. | Eragile aritmetikoak |
| = | Esleipen-eragilea. "=-ren ezkerreko argumentua eskuineko argumentuaren balioarekin ezartzen da. | Esleipen-eragileak |
| == | Egia itzultzen du adierazpenak berdinak badira. | Eragile erlazionalak |
| > | Baino handiagoa. | Eragile erlazionalak |
| >= | Handiagoa edo berdina. | Eragile erlazionalak |
| >> | Bit batetik bestera, eskuinera desplazamendua. Eragile honek ezkerreko aldean dauden bitak eskuineko aldean dauden kopuruaren arabera mugitzen ditu. Desplazamendu bakoitzak zenbakia 2^n-rekin zatitzen du, non n desplazatutako posizioen kopurua den. | Eragile aritmetikoak |
| ?: | Eragile ternarioa. Galdera-ikurra (?) karakterea ere erabiltzen du like eragileak edozein motatako karaktere bat adierazteko. Eragileak like ere karakterea erabiltzen du . |
Operadore ternarioa (?) |
| [ | Array deklaratzailea, irekia. "]-rekin erabili behar da. | |
| ] | Array deklaratzailea, itxi. Erabili behar da "[". | |
| { | Adierazpen konposatua hasten du, eta, aldi berean, zero edo gehiago izan ditzake. Instrukzio konposatua "}" bat datorren hurbilenarekin amaitzen da. | |
| } | Goian deskribatutako adierazpen konposatuaren amaiera adierazten du. "{" bat agertu behar da lehenengo esaldi horien aurrean. | |
| Laburpena | Klase eta metodoen aldatzailea. Klase abstraktu bat ezin da gako-hitz berriarekin eraiki - hortik eratorritako klaseak soilik egin daitezke. Metodo abstraktu bat ezin da deitu, gainidatzi egiten duten metodoek bakarrik egin dezakete. Taula bat abstraktu gisa alda daiteke bere Abstract propietatea Yes gisa ezarriz AOTn, edo klasea DictTable erabiliz.
Abstract propietateak lehenespenez ez du ez, eta ezin da ezarri taula beste taula batek luzatzen ez badu. Taula abstraktu bateko errenkada bakoitzak menpeko errenkada bat izan behar du taula eratorri batean. Horrek esan nahi du taula abstraktu bateko errenkada bakoitzak zero baino balio handiagoa duela bere InstanceRelationType propietate-eremuan. Ez beste ondoriorik taula abstraktu gisa markatzeak. Informalki, programatzaileek askotan konkretu terminoa erabiltzen dute abstraktua ez den klase bat deskribatzeko. |
Metodoen aldatzaileen taularen herentziaren ikuspegi orokorra |
| Edozein mota | Edozein motatako balioak eduki ditzakeen mota da. | Edozein motatakoa |
| honela | Beharrezkoa da oinarrizko klase-aldagai bat klase eratorritako aldagai bati esleitzen diozunean. Adibidez, klase bat Derivedluzatzen duen klase bat Base izanik, instrukzioak myDerived = myBase as Derived; konpilatzailearen errorea saihesten du as gako-hitza erabiliz. Gako-hitz hau oinarrizko taulako aldagai bat taula eratorri bati esleitzen diozunean ere aplikatzen da. Balioa (myBase) ez bada izendatutako motakoa (Derived), adierazpenak null itzultzen du. |
Adierazpen-eragileak: Is eta As for Inheritance |
| ASC | Adierazpen bateko order edo bygroup klausulari buruzko byselect aukera. Ordenazioa gorantz doa. |
Hautatu instrukzioaren sintaxia |
| at | Inprimatze-leiho baten posizioa adierazpenaren zati gisa print zehazten du. Inprimatzeko adierazpena ez da erabili behar. |
Inprimatu adierazpenak |
| batez bestekoa | Instrukzio bateko group by klausulak zehaztutako select errenkadetako eremuen batez bestekoa itzultzen du. |
Hautatu instrukzioaren sintaxia |
| Etena | Berehala irtetea kode bloke iteratibo batetik. | Etendu instrukzioak |
| eten-puntua | Arazketa helburuetarako ezarritako eten-puntua adierazten du. Kodean eten-puntu bat ezartzeko, idatzi: breakpoint; |
|
| arabera | Erreserbatutako termino baten zati bat, hala nola, group by eta order by. | |
| byref | Deitutako metodoari pasatzen zaion parametroa erreferentzia bidez (helbidea) pasatzen ari dela zehazten du, balioaren bidez eta ez balioaren arabera. Byref X++-n erabiltzen da parametro bat erreferentzia gisa hartzen duen .NET metodoa deitzen denean. | Nola: erabili byref gako-hitza CLR Interop-erako. |
| Maiuskula/minuskula | Adierazpen baten switch barruko hautapena. |
Aldatu instrukzioak |
| harrapatu | Salbuespenen kudeaketan erabiltzen da. | Salbuespenen kudeaketa saiatu eta harrapatu gako-hitzekin |
| Aldatu enpresa | Datu-basearen ezarpenak beste enpresa batera aldatzen ditu. | Aldatu enpresaren diseinu-eredua |
| klasea | Klase bat adierazten du. | Klaseak X++ |
| bezeroa | Metodoaren aldatzailea. Aldatzaile hauek jada ez dira erabiltzen. Metodo guztiak zerbitzari-mailan exekutatzen dira. | Metodo-aldatzaileak |
| edukiontzia | Mota container izendatzen du. Edukiontziek balio atomikoen eta beste edukiontzi batzuen sekuentzia bat dute. |
Edukitzaileak |
| Jarraitu | Begizta baten hurrengo iterazioa behartzen du. | Jarraitu adierazpenak |
| Zenbaketa | Instrukzio bateko group by klausulak zehaztutako select errenkadetako erregistro kopurua itzultzen du. |
Hautatu instrukzioaren sintaxia |
| Enpresa gurutzatua | Erabiltzaileak irakurtzeko baimena duen enpresa guztien datuak itzultzea eragiten select du. |
Enpresa arteko X++ kodearen oinarriak |
| data | Motako datealdagaia zehazten du. |
Datak |
| lehenetsia | Maiuskula/minuskula lehenetsia instrukzioen barruan switch . Zati lehenetsiaren kode-blokea exekutatzen da switch balioa instrukzioan case emandako klausuletako batekin switch bat ez badator. |
Aldatu instrukzioak |
| delegatu | Beste klase batzuetako metodoei buruzko erreferentzia ugari gordetzeko gai den klase-kidea, eta metodo horiei guztiei deitzeko gai dena, hala eskatzen zaionean. Ordezkari batek hainbat metodo motaren erreferentziak gorde ditzake, besteak beste:
|
Gertaeraren terminologia eta gako-hitzak X++, C# Konparazioa: Gertaera |
| delete_from | Datu-baseko erregistroak ezabatzeko aukera ematen dizu. | delete_from |
| desc | Adierazpen bateko order by edo group by klausulari buruzko select aukera. Ordenatzea beherantz doa. |
Hautatu instrukzioaren sintaxia |
| Bistaratzea | Metodoaren aldatzailea. Bistaratze/bistaratze< metodoa >erabiltzen da inprimaki-kontrol batean kalkulatutako balioak erakusteko. Eremu arruntak ez bezala, balio horiek ez dira datu-basean gordetzen, baizik eta dinamikoki kalkulatzen dira. |
Metodo-aldatzaileak |
| div | Osoko zatiketa. | Eragile aritmetikoak |
| egin | Begizta baten do...while hasiera. |
Egin... begiztak bitartean |
| Editatu | Metodoaren aldatzailea. X++-ko metodo batek edit erabiltzaileei inprimaki-kontrol bateko balioak aldatzeko aukera ematen die logika pertsonalizatua exekutatzen duten bitartean. Kalkulatutako balioak soilik erakusten dituzten metodoek ez bezala display , edizio-metodoek ikustea eta editatzea ahalbidetzen dute.
|
Metodo-aldatzaileak |
| Bestela | Baldintzapeko exekuzioa (if...else). Instrukzioaren elseif zatia exekutatzen da if instrukzioko adierazpena honela ebaluatzen bada false |
baldin eta baldin ... else adierazpenak |
| Gertaera-kudeatzailea | Erabili behar da delegatu batetik metodo-erreferentzia bat gehitzen edo ezabatzen duzun bakoitzean, or += eragilea erabiliz-=. Adibidez: myDelegate += eventHandler(OtherClass::myStaticMethod); | Gertaeraren terminologia eta gako-hitzak X++, C# Konparazioa: Gertaera |
| existitzen da | Adierazpenetan join klausulekin erabiltzen select da. |
Hautatu instrukzioaren sintaxia |
| hedatzen da | Klase edo interfazearen deklarazio-klausula. Zure klaseak beste klase bat esplizituki luzatzen ez badu, zure klaseak klasea luzatzen Object duela uste da ("objektua hedatzen du" idatzi izan bazenu bezala). |
Azpiklase bat sortzea |
| faltsua | Boolear literala. | Boolearrak |
| Behin betiko | Klase eta metodoen aldatzailea. Metodo hau ezin dela gainidatzi zehazten du. | Metodo-aldatzaileak |
| lehenengoa azkarra | Instrukzioetan select erabiltzen da lehenengo errenkadaren eskurapena azkartzeko. |
Hautatu instrukzioaren sintaxia |
| lehenengoaSoilik | Lehenengo erregistroa soilik eskuratzeko instrukzioetan select erabiltzen da. Gako-hitzak firstOnly ez du bermatzen gehienez erregistro bat X++ SQL select instrukzio batek berreskuratuko duenik. AOS-ek cachea EntireTable erabil badezake instrukzioaren select datu-eskakizunak asetzeko, gako-hitzari ez ikusi egingo zaio firstOnly . |
Hautatu instrukzioaren sintaxi-multzoan oinarritutako cachean gordetzea |
| Lehenengoa10 | firstOnly-ren berdina, izan ezik, 10 errenkada itzultzen ditu baten ordez. | |
| Lehenengoa100 | firstOnly-ren berdina, izan ezik, 100 errenkada itzultzen ditu baten ordez. | |
| firstOnly1000 | firstOnly-en berdina, izan ezik, 1.000 errenkada itzultzen ditu baten ordez. | |
| garbitu | Taulako cache osoa garbitzen du. Hau erabilgarria izan daiteke taulan egindako aldaketak ondorengo eragiketetan berehala islatzen direla ziurtatu nahi baduzu. | Multzoan oinarritutako cachean gordetzea |
| for | Begizta iteraziorako. | Begiztak |
| forceLiterals | Instrukzioetan select erabiltzen da Microsoft SQL Server datu-basean optimizazioan klausuletan where erabiltzen diren benetako balioak agerian uzteko. |
Hautatu instrukzioaren sintaxia |
| forceNestedLoop | SQL Server datu-basea behartzen du begizta habiaratuaren algoritmoa joinerabiltzera . |
Hautatu instrukzioaren sintaxia |
| forcePlacemarks | Instrukzioetan select erabiltzen da nukleoari Microsoft SQL Server datu-baseari klausuletan where erabilitako benetako balioak optimizazioaren unean ez agertzeko agintzeko. |
Hautatu instrukzioaren sintaxia |
| BehartuHautatuOrdena | SQL Server datu-basea behartzen du elkartze batean taulak sartzera zehaztutako ordenan. | Hautatu instrukzioaren sintaxia |
| forUpdate | Erregistroak eguneratzeko soilik hautatzen ditu. Eskuratzen diren erregistroetan egin beharreko eragiketa eguneratzea da. Azpiko datu-basearen arabera, erregistroak blokeatu egin daitezke beste erabiltzaile batzuentzat. | Hautatu instrukzioaren sintaxia |
| De | Adierazpen baten select zati bat. Klausulak from zutabeak dauden taulako bufferra zehazten du. |
Hautatu instrukzioaren sintaxia |
| taldea | Klausularen group by zati bat adierazpen batean select . |
Hautatu instrukzioaren sintaxia |
| baldin eta | Baldintzapeko exekuzioa. | baldin eta baldin ... else adierazpenak |
| inplementazioak | Inplementazioa interface. |
Interfazeen ikuspegi orokorra |
| insert_recordset | Taula bateko edo gehiagoko datuak kopiatzen ditu sortutako helmuga-taula batean zerbitzari-bidaia bakarrean. | insert_recordset |
| int | Motako integer aldagai bat zehazten du (32 bit). |
Zenbaki osoak |
| int64color | Motako integer aldagaia zehazten du (64 bit). |
Zenbaki osoak |
| Interfazea | Interfazearen deklarazioa. | Interfazeen ikuspegi orokorra |
| da | Klase-aldagai batek erreferentzia egiten duen objektua emandako klasetik heredatzen den edo emandako klasearena den galdetzen du. Adibidez, klase bat Derivedluzatzen duen klase bat Base emanez, adierazpenak (myDerived is Base)egia itzultzen du. Gako-hitz hau klaseen herentziari eta taulen herentziari aplikatzen zaio. |
Adierazpen-eragileak: Is eta As for Inheritance |
| Elkartu | Taulak bi taulen zutabe komunetan elkartzen dira. Emaitza multzo bakarra sor dezakezu taula anitzetan oinarrituta, elkartzeak erabiliz. | Hautatu instrukzioaren sintaxia |
| Antzekoa | Ereduaren arabera bat datorren probak egiten ditu, '*' eta '?' komodinekin. | Eragile erlazionalak |
| maxof | Klausulak zehaztutako group by errenkadetako eremuen gehienezko zenbakia itzultzen du. |
Hautatu instrukzioaren sintaxia |
| minof | Klausulak zehaztutako group by errenkadetako eremuen gutxieneko eremuak itzultzen ditu. |
Hautatu instrukzioaren sintaxia |
| mod | Ezkerreko adierazpenaren 1 adierazpenaren gainerako osoa itzultzen du, eskuineko adierazpenarekin2 zatituta. Informalki, batzuetan modulu-eragilea deitzen zaio horri.
(12 mod 7) == 5 egia da. |
|
| Berria | Operadorea. Klase baten instantzia bat sortzen du edo matrize baten memoria esleitzen du. | |
| Hurrengoa | Taula bateko hurrengo erregistroa eskuratzen du, edo hurrengo metodoari deitzen dio aginte-kate-sekuentzia batean. | |
| noFetch | Orain ez da erregistrorik eskuratu behar. | Hautatu instrukzioaren sintaxia |
| ez da existitzen | Adierazpenetan join klausulekin erabiltzen select da. |
Hautatu instrukzioaren sintaxia |
| baliogabea | Konstante sinbolikoa. | |
| Blokeo optimista | Instrukzio bat konkurtsotasun-kontrol baikorrarekin exekutatzera behartzen du, nahiz eta mahai gainean beste balio bat ezarri. | Hautatu instrukzioaren sintaxia |
| eskaera | Klausularen order by zati bat adierazpen batean select . |
Hautatu instrukzioaren sintaxia |
| kanpokoa | Kanpoko elkartzea. | Hautatu instrukzioaren sintaxia |
| Pausarazi | Lan baten exekuzioa geldiarazten du. Erabiltzaileari exekuzioak jarraitu behar duen ala ez adierazteko eskatzen zaio. Ez zenuke adierazpen hau ekoizpen kodean erabili behar. | Hautatu instrukzioak |
| Blokeo pesimista | Adierazpen bat konkurtsotasun-kontrol pesimistarekin exekutatzera behartzen du, nahiz eta mahai gainean beste balio bat ezarri. | Hautatu instrukzioaren sintaxia |
| Inprimatu | Irteera pantailan bistaratzeko aukera ematen dizu. Ez zenuke adierazpen hau ekoizpen kodean erabili behar. | Inprimatu adierazpenak |
| pribatua | Metodoaren atzipen-aldatzailea. Metodoa deklaratzen duen klasean soilik erabil daiteke. | Metodoaren sarbide-kontrola |
| babestuta | Metodoaren atzipen-aldatzailea. Metodoa metodoak deklaratzen dituen klaseko metodoetatik eta edozein klase eratorritako metodoetatik erabil daiteke. | Metodoaren sarbide-kontrola |
| publikoa | Metodoaren atzipen-aldatzailea. Metodoa edozein klasetatik deitu daiteke. | Metodoaren sarbide-kontrola |
| benetakoa | Mota hamartarra izendatzen real du, biribiltze-errorerik gabe. |
Errealak |
| errepikagarriaIrakurri | Zehazten du beste transakzio batzuek ezin dituztela uneko transakzioaren barruan logikak irakurri dituen datuak aldatu, uneko transakzioa amaitu arte. Transakzio esplizitu bat ttsAbort-en edo kanpoko ttsCommit-en osatzen da. Select instrukzio autonomo baten kasuan, transakzioaren iraupena hautatutako komandoaren iraupena da. Hala ere, datu-baseak batzuetan repeatableRead baliokidea ezartzen du banakako hautapen-instrukzioetan , nahiz eta gako-hitz hori X++ kodean agertu gabe (datu-baseak taulak eskaneatzea erabakitzen duen moduaren arabera). | Informazio gehiago nahi izanez gero, ikus oinarrizko datu-base erlazionalaren produktuaren dokumentazioa. |
| saiatu berriro | Salbuespenen kudeaketan erabiltzen da. | Salbuespenen kudeaketa saiatu eta harrapatu gako-hitzekin |
| itzuli | Metodo batetik itzultzen da. | Metodoen adierazpena |
| alderantzikatu | Erregistroak alderantzizko ordenan itzultzen dira. | Hautatu instrukzioaren sintaxia |
| hautatu | Klausulak select emaitza-multzoan zein zutabe edo ikuspegi erakusten diren adierazten du. |
Hautatu instrukzioak |
| zerbitzaria | Metodoaren aldatzailea. Aldatzaile honi ez zaio jaramonik egiten eta ez da erabili behar, metodo guztiak zerbitzariaren aldean exekutatzen baitira. | Metodo-aldatzaileak |
| ezarpena | update_recordset komandoarekin erabiltzen da. | update_recordset |
| estatikoa | Metodo estatikoek ezin dute instantzia aldagaiei erreferentzia egin (aldagai estatikoei soilik); klasearen izena erabiliz deitu daiteke, klasearen instantzia batean baino.MyClass.aStaticProcedure |
Metodo-aldatzaileak |
| str | Mota string izendatzen du. |
Kateak |
| batura | Instrukzio bateko group by klausulak zehaztutako select errenkadetako eremuen batura itzultzen du. |
Hautatu instrukzioaren sintaxia |
| super | Uneko metodoak gainidatzi duen metodoari deitzen dio. | Taularen metodoak |
| Aldatu | Aldatu instrukzioa. | Aldatu instrukzioak |
| TaulaBlokeatu | Zaharkituta; tableLock jada ez erabilgarri. | |
| hau | Klasearen uneko instantziaren erreferentzia. X++ kodean erabiltzen da klasearen instantzia metodo baten barruan. Klaseko kideei erreferentzia egiteko erabiltzen da. | |
| bota | Salbuespenen kudeaketan erabiltzen da. | Salbuespenen kudeaketa saiatu eta harrapatu gako-hitzekin |
| true | Boolear literala. | Boolearrak |
| saiatu | Salbuespenen kudeaketan erabiltzen da. | Salbuespenen kudeaketa saiatu eta harrapatu gako-hitzekin |
| ttsAbortatu | Atzera bota (hau da, baztertu) uneko transakzioaren aldaketa guztiak. | Transakzioaren osotasuna |
| ttsHasiera | Transakzio baten hasiera markatzen du. | Transakzioaren osotasuna |
| ttsCommit | Transakzio baten amaiera markatzen du, tauletan aldaketak egikarituz. | Transakzioaren osotasuna |
| update_recordset | Eragiketa baten barruan errenkada-multzoak manipulatzea ahalbidetzen du. | update_recordset |
| baliozko denbora-egoera | X++ SQL instrukzio select baten bidez baliozko denbora-egoeraren taula batetik berreskuratutako errenkadak iragazten ditu. Adibidez: hautatu validTimeState(myDateEffective) * xMyTable-tik; ... edo... hautatu validTimeState(myDateFrom, myDateTo) * xMyTable-tik; |
Baliozko denbora-egoeraren taulen eragina irakurketa- eta idazketa-eragiketetan |
| hutsik | Baliorik itzultzen ez duen metodoa identifikatzen du. | Metodoen adierazpena |
| non | Adierazpen baten select zati bat. Klausulak where bete beharreko baldintzak zehazten ditu; hau da, emaitzan sartu nahi dituzun errenkadak. |
Hautatu instrukzioaren sintaxia |
| bitartean | Iterazio-instrukzioa. Behin eta berriz exekutatzen du instrukzioa, betiere proba-baldintza egiazkoa bada. | Bitartean begiztak egiten dira hautatutako instrukzioak |
| leihoa | Irteerako leihoaren tamaina aldatzeko aukera ematen dizu. Ekoizpen-kodean gomendatzen ez diren inprimatu/inprimatzeko< instrukzioekin >erabiltzen da. |
Inprimatu adierazpenak |
Adierazpenen sintaxia
X++-ko adierazpen bat modu matematikoan edo logikoan erabiltzen da. Adierazpenak hizkuntzaren datu motetan oinarritzen dira; Hau da, adierazpen batek beti itzultzen du nolabaiteko balio bat. Balio hau kalkuluetan, esleipenetan, baldintzapeko instrukzioetan eta abarretan erabil daiteke.
EBNF adierazpenen deskribapena X++-n
| Terminoa | Definizioa | |
|---|---|---|
| Expression | = | Adierazpen sinplea [ErlazionalaEragilea Adierazpen sinplea] |
| Eragile erlazionala | = | = |
| Adierazpen sinplea | = | Adierazpen sinplea [ + |
| Terminoa | = | Konposaktorea { eragile anitzeko konpentzia-faktorea } |
| Eragile anitzeko | = | * |
| Konposaketa faktorea | = | [ ! ] [ - |
| Faktorea | = | Literala |
| Zenbakitzea | = | EnumName :: Literal |
| Aldagaia | = | Identifikatzailea [ [ Adierazpena ] ] [ . Adierazpena ] |
| Funtzio-deia | = | [ Adierazpena (. |
| If adierazpena | = | Adierazpena? Adierazpena: Adierazpena |
Murrizketa semantikoak aurreko sintaxiari aplikatzen zaizkio. Ezin duzu metodo bat deitu :: eragilea erabiliz. Era berean, ezin duzu hau gako-hitza erabili objektu aktiborik gabe; hau da, instantzia metodo baten barruan ez bazaude eta abar.
Adibideak
| Adierazpenaren adibidea | Azalpena |
|---|---|
1 |
Zenbaki osoko literala. |
| EzBai::Ez | Enum-erreferentzia bat. |
A |
Erreferentzia aldagaia. |
| Zordun::Find("1") | Metodo-dei estatikoa (bezeroaren aldagai bat itzultzen du). |
| (A > 3 ? egiazkoa : faltsua) | Egiazkoa edo faltsua itzultzen duen if adierazpena. |
| (hautatu CustTable non CustTable.Account == "100"). IzenaErreferentzia | Hautapen-adierazpena. Bezeroaren taulako nameref eremua itzultzen du. Hau kate bat da. |
| A >= B | Adierazpen logikoa. Egia edo gezurra itzultzen du. |
| A + B | Adierazpen aritmetiko bat. A eta B zenbatekoak. |
| A + B / C | B/C kalkulatzen du, eta gero A-ri gehitzen dio. |
| ~ A + hau. Balioa () | Batu bitarra ez da A eta metodo-deiaren emaitza Value objektuan (this). |
| Zordun::Find ("1"). IzenaErreferentzia | Aurkitutako bezeroaren erregistroaren NameRef eremua itzultzen du. |
| Zordun::Find ("1"). Balantza () | Bezeroaren taulako metodo-deia Balance (Zordunak::Find bezero bat itzultzen du). Bezeroaren saldoa itzultzen du 1. kontu zenbakiarekin. |
EBNF ikuspegi orokorra
Extended Backus Naur Form (EBNF) metalengoaia bat da, eta gida honetan hizkuntzaren sintaxia deskribatzeko erabiltzen da. EBNF definizioa ekoizpen-arauak, ez-terminalak eta terminalak dira. Termino nagusiak ondorengo taulan agertzen dira.
| Gako-terminoak | Adibidea | Azalpena |
|---|---|---|
| Terminalak | Work_Team | Terminal bat inoiz aldatzen ez den karaktere bat edo karaktere-kate bat da. |
| Terminalak ez direnak | Employee |
Ez-terminala baliozko esaldi baten zati baten deskribapena da, ekoizpen-arau batek edo testu-deskribapen batek definitzen duena. Terminala ez den ikur bat terminal ikur batera edo gehiagotara zabal daiteke beti. |
| Ekoizpen-arauak | Langilea = Garatzailea | Probatzailea |
Adibidea
Work_Team = Langile kudeatzailea {, Langilea} Langilea = Garatzailea | Adibide honek Work_Team bat eta bat edo gehiagok ManagerEmployeesosatzen duten bezala definitzen du. An Employee honela definitzen da, edo DeveloperTestera. Adibide honetan erabilitako ikurrak ondorengo taulan azaltzen dira.
Ikur bereziak EBNFn
| Sinboloa | Azalpena |
|---|---|
| (Adierazpena) | Parentesiek sinboloak (terminalak eta ez-terminalak) elkarrekin mantentzen dituzte. Ekoizpen arau baten eskuineko aldean edozein lekutan jar daitezke. |
| 1. adierazpena | 2. adierazpena |
| [Adierazpena] | Aukerakoa: [ eta ] artean dauden elementuak aukerakoak dira. Parentesietako elementu guztiak edo bat ere ez daude sartuta. |
| {Adierazpena} | Errepikatu: { eta } artean dauden elementuak aukerakoak dira, baina behar adina aldiz errepika daitezke. |
Adibidez, zure bizikletarako erosten dituzun osagarriak eserlekua, ur botila-euskarriak, kanpaiak eta adarrak badira, eta kanpai bat edo adarra izan ditzakezu, eta zero, ur botila bat edo gehiago, eta zehazki eserleku bat, honela adieraz daiteke: Bicycle_Accessories = saddle [kanpaia | adarra] {water_bottle_holders} Gramatika honek aukera hauek definitzen ditu: saddlesaddle bellsaddle horn saddle water_bottle_holder saddle bell water_bottle_holder saddle bell water_bottle_holder water_bottle_holder Eta abar.
X++ gramatika
Artikulu honek X++ lengoaiaren gramatika formala erakusten du.
Nola interpretatu BNF gramatika formala
Atal honetan X++-ren gramatika deskribatzen da Backus Naur Form (BNF). Hemen DBHren adibide txiki bat deskribatzen da.
AA ::= BB CC_SYM
BB ::= JJ_SYM
::= KK_SYM
AA Produkzio arau baten izena da. A AA eskatzen BBdu, eta ondoren CC_SYM. Ekoizpen-araua BB ere bada. Beraz, BB ez da terminal bat.
BB JJ_SYM edo KK_SYM izan behar du. Bai JJ_SYM bai KK_SYM terminalak dira, ez baitira beste produkzio arauen izenak. CC_SYM ere terminal bat da.
BNF X++ gramatikan, terminal gehienek _SYM dute beren izenaren atzizki gisa.
X++ gramatika formala BNFn
Atal honek X++-ren gramatika definitzen duen BNF da.
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