Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Megjegyzés:
A közösségi érdekcsoportok mostantól a Yammerből a Microsoft Viva Engagebe költöztek. Ha csatlakozni szeretne egy Viva Engage-közösséghez, és részt szeretne venni a legutóbbi megbeszéléseken, töltse ki a Pénzügyi és üzemeltetési Hozzáférés kérése Viva Engage Community űrlapot, és válassza ki a közösséget, amelyhez csatlakozni szeretne.
Ez a cikk az X++ szintaxishivatkozását tartalmazza.
X++ kulcsszavak
Az alábbi táblázatban látható X++ kulcsszavak fenntartottak. Ezek a kulcsszavak semmilyen más célra nem használhatók.
| Fenntartott szó | Description | Kapcsolódó információk |
|---|---|---|
| ! | Nem. | Relációs operátorok |
| != | Egyenlőtlenség operátor (nem egyenlő). | Relációs operátorok |
| # | Makrónevek előtagja. | Útmutató: Makró tesztelése #define és #if használatával |
| & | Bináris ÉS. | Számtani operátorok |
| && | Logikai ÉS. | Relációs operátorok |
| ( | Függvényhívási operátor, amely a függvényhívás kezdetét jelzi. | |
| ) | Függvényhívási operátor, amely a függvényhívás végét jelzi. | |
| * | Szoroz. A csillag (*) az X++ SQL-ben is használatos. Az egyik lehetőség az, hogy egy utasítás tábláinak összes mezőjét select aláírja. Egy másik használható helyettesítő karakter az like operátorral, hogy 0-t jelöljön bármilyen karakterhez. Az like operátor a ? karaktert is használja. |
Számtani operátorok |
| ^ | Bináris XOR. | Számtani operátorok |
| | | Bináris VAGY. | Számtani operátorok |
| || | Logikai VAGY. | Relációs operátorok |
| ~ | Nem. | Számtani operátorok |
| + | Plusz. | Számtani operátorok |
| ++ | Növekmény. | Hozzárendelési operátorok |
| += | Additív hozzárendelés. | Hozzárendelési operátorok |
| , | Vessző operátor. A vesszővel elválasztott kifejezéseket egymás után balról jobbra értékeli a rendszer. | |
| - | Mínusz. | Számtani operátorok |
| -- | Decrement operátor. | Hozzárendelési operátorok |
| -= | Kivonási hozzárendelés. | Hozzárendelési operátorok |
| . | Az osztálytagok hozzáférési operátora például formRun.run egy osztálytípusú runobjektum metódusához fér hozzáFormRun. |
|
| / | Oszt. | Számtani operátorok |
| \ | Menekülés sztringekben. Feloldja a további idézőjeleket és bizonyos betűket, például a tabulátor "\t" betűit . | |
| @ | A kulcsszavak kimenekülése. Például nem sikerül lefordítani a karakter nélkül, var @str = 1@abstract; amely miatt az @ azt követő sztringek azonosítónak minősülnek. A szó szerinti sztringekre is hatással van a \escape karakter hatásának tagadásával, valamint azzal, hogy lehetővé teszi, hogy a sztring egynél több sort is átfogjon a forráskódban. Az új vonalat a hexadecimális 0x0A egyik karaktere jelöli, amelyet gyakran vonalcsatornának neveznek. A hexadecimális 0x0D nem tartalmaz kocsivissza karaktert, mint 0x0D0A. | |
| : | A kettőspont (:) karakter a kis- és nagybetűk értékeinek elválasztására szolgál az switch utasításban. |
|
| :: | Statikus (osztály)metódusok meghívására szolgál: ClassName::methodName() és enumerálási literálok kijelölésére, például NoYes::Igen. | |
| ; | Leállítja az utasításokat. Hurkokban for vagy inicializáló, frissítési és érték-ellenőrző részek elválasztójaként használatos. |
|
| < | Kevesebb, mint. | Relációs operátorok |
| << | Bal műszak. | Számtani operátorok |
| <= | Kisebb vagy egyenlő. | Számtani operátorok |
| = | Hozzárendelés-operátor. A "=" bal oldalán lévő argumentum a jobb oldali argumentum értékére van állítva. | Hozzárendelési operátorok |
| == | Igaz értéket ad vissza, ha a kifejezések egyenlők. | Relációs operátorok |
| > | Nagyobb, mint. | Relációs operátorok |
| >= | Nagyobb vagy egyenlő. | Relációs operátorok |
| >> | Bitenkénti jobbra váltás. Ez az operátor a bal oldalon lévő biteket a jobb oldalon lévő összeggel mozgatja. Minden műszak 2^n-sel osztja el a számot, ahol n az eltolt pozíciók száma. | Számtani operátorok |
| ?: | Ternáris operátor. A kérdőjel (?) karaktert az like operátor is használja, hogy pontosan egy tetszőleges karaktert jelöljön. Az like operátor a karaktert is használja. |
Ternáris operátor (?) |
| [ | Tömbdeklarátor, megnyitás. A következővel kell használni: "]". | |
| ] | Tömbdeklarátor, bezárva. A(z) "[" karakterrel kell használni. | |
| { | Olyan összetett utasítást indít el, amely nulla vagy több utasítást tartalmazhat. Az összetett utasítás a legközelebbi egyező "}" kifejezéssel végződik. | |
| } | A fent leírt összetett utasítás végét jelzi. A(z) "{" kifejezésnek az első utasítás előtt kell megjelennie. | |
| összefoglaló | Osztály- és metódusmódosító. Az absztrakt osztályok nem hozhatók létre az új kulcsszóval – csak az abból származtatott osztályok.
Absztrakt metódust nem lehet meghívni, csak azokat a metódusokat, amelyek felülírják azt. A táblák absztraktként módosíthatók úgy, hogy az Absztrakt tulajdonságát Igen értékre állítja az AOT-ban, vagy az DictTable osztály használatával. Az Absztrakt tulajdonság alapértelmezés szerint nem, és csak akkor állítható be, ha a táblát egy másik tábla kiterjeszti. Az absztrakt tábla minden sorának függő sornak kell lennie egy származtatott táblában. Ez azt jelenti, hogy egy absztrakt tábla minden sora nullánál nagyobb értékkel rendelkezik az InstanceRelationType tulajdonságmezőjében. A táblák absztraktként való megjelölésének nincs más hatása. Informálisan a programozók gyakran a beton kifejezést használják egy nem absztrakt osztály leírására. |
A metódusmódosítók táblázatöröklési áttekintése |
| anytype | Olyan típus, amely bármilyen típusú értéket tartalmazhat. | Bármely típus |
| amint | Akkor szükséges, ha egy alaposztály-változót egy származtatott osztályváltozóhoz rendel. Ha például egy Derivedosztályt kiterjesztőBase osztályt használ, az utasítás myDerived = myBase as Derived;a kulcsszó használatával elkerüli a fordítóhibát. Ez a kulcsszó akkor is érvényes, ha alaptábla-változót rendel egy származtatott táblaváltozóhoz. Ha az érték (myBase) nem a kijelölt (származtatott) típus, akkor a kifejezés null értéket ad vissza. |
Kifejezés operátorok: Is and as for Inheritance |
| Asc | Egy utasítás vagy orderzáradék egyik lehetőségebygroup.byselect A rendezés növekvő. |
Utasításszintaxis kiválasztása |
| at | Egy nyomtatási ablak pozícióját adja meg egy print utasítás részeként. A nyomtatási utasítást nem szabad használni. |
Utasítások nyomtatása |
| Avg | Egy utasítás záradékában group byselect megadott sorok mezőinek átlagát adja vissza. |
Utasításszintaxis kiválasztása |
| break | Azonnali kilépés egy iteratív kódblokkból. | Törési utasítások |
| Töréspont | Hibakeresési célokra beállított töréspontot jelöl. Ha töréspontot szeretne beállítani a kódban, írja be a következőt: breakpoint; |
|
| mellett | Egy fenntartott kifejezés része, például csoportosítás és sorrend szerint. | |
| byref | Azt adja meg, hogy a hívott metódusnak átadott paramétert a rendszer hivatkozással (címmel) adja át az érték helyett. A Byref az X++-ban használható egy olyan .NET-metódus meghívásakor, amely hivatkozással vesz fel egy paramétert (például a C#-kulcsszavak ki - vagy újraf. használatával). | Útmutató: A CLR Interop byref kulcsszójának használata. |
| eset | Kijelölés egy utasításon switch belül. |
Utasítások váltása |
| elkap | Kivételkezeléshez használatos. | Kivételkezelés kipróbálással és kulcsszavak elfogása |
| changeCompany | Az adatbázis beállításait egy másik vállalatra módosítja. | Céges tervezési minta módosítása |
| osztály | Osztályt deklarál. | Osztályok az X++-ban |
| ügyfél | Metódusmódosító. Ezek a módosítók már nem használhatók. A rendszer minden metódust a kiszolgáló szintjén hajt végre. | Metódusmódosítók |
| tároló | A típust container jelöli meg. A tárolók atomértékek és egyéb tárolók sorozatát tartalmazzák. |
Containers |
| continue | Egy hurok következő iterációját kényszeríti ki. | Utasítások folytatása |
| count | A záradék által group by egy utasításban select megadott sorok rekordjainak számát adja vissza. |
Utasításszintaxis kiválasztása |
| keresztkomponens |
select Egy utasítás az összes olyan vállalat adatait adja vissza, amelyekből a felhasználó olvasási jogosultsággal rendelkezik. |
Vállalatközi X++ kód alapjai |
| date | Típusváltozót datead meg. |
Dátumok |
| alapértelmezett | Alapértelmezett eset az utasításokban switch . Az alapértelmezett rész kódblokkja akkor lesz végrehajtva, ha a kapcsoló értéke nem egyezik az case utasításban switch megadott záradékokkal. |
Utasítások váltása |
| delegate | Egy osztálytag, amely képes több metódusra mutató hivatkozást tárolni más osztályokban, és meghívni ezeket a metódusokat, amikor a rendszer erre kéri. A meghatalmazottak különféle módszerekre mutató hivatkozásokat tárolhatnak, például a következőket:
|
Esemény terminológiája és kulcsszavak X++, C# összehasonlítása: Esemény |
| delete_from | Lehetővé teszi rekordok törlését az adatbázisból. | delete_from |
| Desc | Egy utasítás vagy order by záradék group by egyik lehetőségeselect. A rendezés csökkenő. |
Utasításszintaxis kiválasztása |
| kijelző | Metódusmódosító. Egy megjelenítési</megjelenítési> módszer a számított értékek űrlapvezérlőben való megjelenítésére szolgál. A normál mezőkkel ellentétben ezek az értékek nem az adatbázisban vannak tárolva, hanem dinamikusan vannak kiszámítva. |
Metódusmódosítók |
| div | Egész szám osztás. | Számtani operátorok |
| csinál | Egy do...while hurok kezdete. |
Csinál... míg a hurkok |
| szerkeszt | Metódusmódosító. Az edit X++ metódussal a felhasználók egyéni logika végrehajtásakor módosíthatják az űrlapvezérlő értékeit. A csak számított értékeket megjelenítő metódusokkal ellentétben display a szerkesztési módszerek lehetővé teszik a megtekintést és a szerkesztést is.
|
Metódusmódosítók |
| egyébként | Feltételes végrehajtás (if...else). Az else utasítás részét akkor if hajtja végre a rendszer, ha az if utasításban szereplő kifejezést a rendszer a következőre értékeli: false |
ha és ha ... else Statements |
| eventHandler | Minden alkalommal használni kell, amikor metódushivatkozást ad hozzá vagy töröl egy meghatalmazotttól az operátor vagy += az -= operátor használatával. Például: myDelegate += eventHandler(OtherClass::myStaticMethod); | Esemény terminológiája és kulcsszavak X++, C# összehasonlítása: Esemény |
| Létezik | Utasítások záradékaival join együtt select használva. |
Utasításszintaxis kiválasztása |
| Kiterjeszti | Osztály- vagy felületdeklarációs záradék. Ha az osztály nem terjeszt ki explicit módon egy másik osztályt, akkor az osztály úgy tekintendő, hogy kiterjeszti az Object osztályt (mintha azt írta volna, hogy "kiterjeszti az objektumot"). |
Alosztály létrehozása |
| téves | Logikai literál. | Logikai érték |
| végső | Osztály- és metódusmódosító. Azt határozza meg, hogy ez a metódus nem bírálható felül. | Metódusmódosítók |
| firstFast | Az utasításokban select az első sor beolvasásának felgyorsítására szolgál. |
Utasításszintaxis kiválasztása |
| firstOnly | Az utasításokban select csak az első rekord lekérésére szolgál. A firstOnly kulcsszó nem garantálja, hogy egy X++ SQL-utasítás select legfeljebb egy rekordot kér le. Ha az AOS a EntireTable gyorsítótár használatával képes kielégíteni az utasítás adatigényeit select , a firstOnly kulcsszó figyelmen kívül lesz hagyva. |
Utasításszintaxis kiválasztása – Készletalapú gyorsítótárazás |
| firstOnly10 | Ugyanaz, mint először, kivéve, hogy egy helyett 10 sort ad vissza. | |
| firstOnly100 | Ugyanaz, mint először, kivéve, hogy egy helyett 100 sort ad vissza. | |
| firstOnly1000 | Ugyanaz, mint először, kivéve, hogy egy helyett 1000 sort ad vissza. | |
| flush | Törli a teljes táblagyorsítótárat. Ez akkor lehet hasznos, ha meg szeretné győződni arról, hogy a tábla módosításai azonnal megjelennek a későbbi műveletekben. | Set-based Caching |
| for | Hurok iterációhoz. | Hurkok esetén |
| forceLiterals | Az utasításokban select a Microsoft SQL Server-adatbázis záradékaiban where használt tényleges értékek megjelenítésére szolgál az optimalizálás időpontjában. |
Utasításszintaxis kiválasztása |
| forceNestedLoop | Kényszeríti az SQL Server-adatbázist, hogy beágyazott ciklusú algoritmust használjon egy adott SQL-utasítás feldolgozásához, amely egy join. |
Utasításszintaxis kiválasztása |
| forcePlaceholders | Az utasításokban select arra utasítja a kernelt, hogy ne fedje fel a záradékokban where használt tényleges értékeket a Microsoft SQL Server adatbázisában az optimalizálás időpontjában. |
Utasításszintaxis kiválasztása |
| forceSelectOrder | Kényszeríti az SQL Server-adatbázist, hogy a megadott sorrendben férhessen hozzá a táblákhoz egy illesztésben. | Utasításszintaxis kiválasztása |
| forUpdate | Kizárólag a frissítéshez tartozó rekordokat választja ki. A lekért rekordokon végrehajtandó művelet egy frissítés. Az alapul szolgáló adatbázistól függően előfordulhat, hogy a rekordok zárolva vannak más felhasználók számára. | Utasításszintaxis kiválasztása |
| tól | Egy nyilatkozat része select . A from záradék azt a táblázatpuffert határozza meg, amelyben az oszlopok léteznek. |
Utasításszintaxis kiválasztása |
| group |
group by A záradék része egy select utasításban. |
Utasításszintaxis kiválasztása |
| if | Feltételes végrehajtás. | ha és ha ... else Statements |
| Végrehajtja |
interfaceEgy . |
Interfészek áttekintése |
| insert_recordset | Adatok másolása egy vagy több táblából egy eredményül kapott céltáblába egyetlen kiszolgálóúton. | insert_recordset |
| int | Egy (32 bites) típusú integer változót ad meg. |
Egészek |
| int64 | Egy (64 bites) típusú integer változót ad meg. |
Egészek |
| interface | Felületi deklaráció. | Interfészek áttekintése |
| van | Megkérdezi, hogy az osztályváltozó által hivatkozott objektum örökli-e az adott osztályt, vagy az adott osztályhoz tartozik. Ha például egy Derived osztályt kiterjesztőBase osztályt ad vissza, a kifejezés (myDerived is Base)igaz értéket ad vissza. Ez a kulcsszó az osztályöröklésre és a táblaöröklésre vonatkozik. |
Kifejezés operátorok: Is and as for Inheritance |
| join | A táblák a két tábla közös oszlopaihoz vannak illesztve. Az illesztések használatával egyetlen eredményhalmazt hozhat létre több tábla alapján. | Utasításszintaxis kiválasztása |
| szeret | A "*" és a "?" helyettesítő karaktereket tartalmazó egyezések tesztelése minta szerint. | Relációs operátorok |
| maxof | A záradék által group by megadott sorok mezőinek maximális értékét adja vissza. |
Utasításszintaxis kiválasztása |
| minof | A záradék által group by megadott sorok mezőinek minimális értékét adja vissza. |
Utasításszintaxis kiválasztása |
| mod | A bal oldali kifejezés1 hátralévő részét adja vissza a jobb oldali kifejezés2 osztva. Ezt informálisan modulo operátornak is nevezik.
(12 mod 7) == 5 igaz. |
|
| új | Operátor. Létrehoz egy osztálypéldányt, vagy lefoglalja a memóriát egy tömbhöz. | |
| next | Beolvassa a tábla következő rekordját, vagy meghívja a következő metódust egy parancslánc-sorozatban. | |
| noFetch | Azt jelzi, hogy most nem kell rekordokat beolvasni. | Utasításszintaxis kiválasztása |
| notExists | Utasítások záradékaival join együtt select használva. |
Utasításszintaxis kiválasztása |
| nulla | Szimbolikus állandó. | |
| optimisticLock | Egy utasítást optimista egyidejűség-vezérléssel való futtatásra kényszerít, még akkor is, ha egy másik érték van beállítva a táblában. | Utasításszintaxis kiválasztása |
| megrendelés |
order by A záradék része egy select utasításban. |
Utasításszintaxis kiválasztása |
| külső | külső illesztés. | Utasításszintaxis kiválasztása |
| pause | Leállítja egy feladat végrehajtását. A rendszer arra kéri a felhasználót, hogy adja meg, hogy a végrehajtás folytatódjon-e. Ezt az utasítást nem szabad éles kódban használni. | Utasítások kiválasztása |
| pessimisticLock | Az utasítást pesszimista egyidejűség-vezérléssel kell futtatni, még akkor is, ha egy másik érték van beállítva a táblában. | Utasításszintaxis kiválasztása |
| Lehetővé teszi a kimenet megjelenítését a képernyőn. Ezt az utasítást nem szabad éles kódban használni. | Utasítások nyomtatása | |
| privát | Metódushozzáférési módosító. A metódus csak a metódust deklaráló osztályon belül használható. | Metódus hozzáférés-vezérlése |
| védett | Metódushozzáférési módosító. A metódus a metódusokat deklaráló osztály metódusaiból és bármely származtatott osztályból használható. | Metódus hozzáférés-vezérlése |
| public | Metódushozzáférési módosító. A metódus bármely osztályból meghívható. | Metódus hozzáférés-vezérlése |
| valódi |
real A típust, egy tizedes törttípust jelöli kerekítési hibák nélkül. |
Reals |
| repeatableRead | Azt adja meg, hogy más tranzakciók nem módosíthatják az aktuális tranzakción belül a logika által beolvasott adatokat, amíg az aktuális tranzakció befejeződik. Egy explicit tranzakció ttsAbort vagy a legkülső ttsCommit webhelyen fejeződik be. Önálló kiválasztási utasítás esetén a tranzakció időtartama a kiválasztási parancs időtartama. Az adatbázis azonban néha kényszeríti az ismétlődőRead megfelelőt az egyes választó utasításokban, még akkor is, ha ez a kulcsszó nem jelenik meg az X++ kódban (attól függően, hogy az adatbázis hogyan dönt a táblák vizsgálatáról). | További információkért tekintse meg a mögöttes relációs adatbázis termékének dokumentációját. |
| Újra | Kivételkezeléshez használatos. | Kivételkezelés kipróbálással és kulcsszavak elfogása |
| visszatérés | Metódusból ad vissza. | Módszerek deklarációja |
| reverse | A rekordok fordított sorrendben jelennek meg. | Utasításszintaxis kiválasztása |
| kiválaszt | A select záradék meghatározza, hogy mely oszlopok vagy nézetek jelenjenek meg az eredményhalmazban. |
Utasítások kiválasztása |
| kiszolgáló | Metódusmódosító. Ezt a módosítót a rendszer figyelmen kívül hagyja, és nem szabad használni, mivel az összes metódus a kiszolgáló oldalán fut. | Metódusmódosítók |
| beállítás | A update_recordset paranccsal használható. | update_recordset |
| statikus | A statikus metódusok nem hivatkozhatnak példányváltozókra (csak statikus változókra); az osztálynév használatával hívható meg, nem pedig az osztály egy példányán ("MyClass.aStaticProcedure"). |
Metódusmódosítók |
| Str | A típust string jelöli meg. |
Húrok |
| összeg | Egy utasítás záradékában group byselect megadott sorok mezőinek összegét adja vissza. |
Utasításszintaxis kiválasztása |
| szuper | Az aktuális metódus által felülírt metódus meghívása. | Táblázatos metódusok |
| kapcsoló | Kapcsoló utasítás. | Utasítások váltása |
| tableLock | Elavult; A tableLock már nem érhető el. | |
| ez | Az osztály aktuális példányára mutató hivatkozás. X++ kódban használatos az osztály egy példánymetódusán belül. Az osztály metódustagjainak hivatkozására szolgál. | |
| vet | Kivételkezeléshez használatos. | Kivételkezelés kipróbálással és kulcsszavak elfogása |
| igaz | Logikai literál. | Logikai érték |
| megpróbál | Kivételkezeléshez használatos. | Kivételkezelés kipróbálással és kulcsszavak elfogása |
| ttsAbort | Az aktuális tranzakció összes módosításának visszaállítása (azaz elvetése). | Tranzakciós integritás |
| ttsBegin | Egy tranzakció elejét jelöli meg. | Tranzakciós integritás |
| ttsCommit | Egy tranzakció végét jelöli meg, és véglegesíti a táblák módosításait. | Tranzakciós integritás |
| update_recordset | Lehetővé teszi a sorhalmazok egy műveleten belüli kezelését. | update_recordset |
| validTimeState | Az érvényes időállapottáblából X++ SQL utasítással select lekért sorokat szűri. Például: válassza a validTimeState(myDateEffective) * lehetőséget az xMyTable; ... vagy... válassza a validTimeState(myDateFrom, myDateTo) * lehetőséget az xMyTable-ból; |
Érvényes időállapot-táblák hatása az olvasási és írási műveletekre |
| semmis | Olyan metódust azonosít, amely nem ad vissza értéket. | Módszerek deklarációja |
| where | Egy nyilatkozat része select . A where záradék megadja azokat a feltételeket, amelyeket teljesíteni szeretne, vagyis azokat a sorokat, amelyeket bele szeretne foglalni az eredménybe. |
Utasításszintaxis kiválasztása |
| mialatt | Iterációs utasítás. Ismétlődően hajt végre egy utasítást, amíg a tesztfeltétel igaz. | Miközben a ciklusok az Utasítások kiválasztásakor |
| ablak | Lehetővé teszi a kimeneti ablak méretének módosítását. Olyan nyomtatási/nyomtatási< utasításokkal >használható, amelyek nem ajánlottak az éles kódban. |
Utasítások nyomtatása |
Kifejezések szintaxisa
Az X++ kifejezés matematikai vagy logikai módon is használható. A kifejezések a nyelv adattípusára épülnek; vagyis egy kifejezés mindig valamilyen típusú értéket ad vissza. Ez az érték használható számításokhoz, hozzárendelésekhez, feltételes utasításokhoz stb.
Az X++ kifejezéseinek EBNF-leírása
| Időszak | Definition | |
|---|---|---|
| Expression | = | Simple-expression [RelationalOperator Simple-expression ] |
| Relációsoperátor | = | = |
| Egyszerű kifejezés | = | Egyszerű kifejezés [ + |
| Időszak | = | Compfactor { Mult-operátor CompFactor } |
| Mult-operátor | = | * |
| CompFactor | = | [ ! ] [ - |
| Tényező | = | Literal |
| Enum | = | EnumName :: Literál |
| Variable | = | Azonosító [ [ Kifejezés ] ] [ . Kifejezés ] |
| FunctionCall | = | [ Kifejezés (. |
| If-kifejezés | = | Kifejezés? Kifejezés: Kifejezés |
A szemantikai korlátozások az előző szintaxisra vonatkoznak. A :: operátorral nem hívhat meg metódust. Hasonlóképpen nem használhatja ezt a kulcsszót aktív objektum nélkül; vagyis ha nem egy példánymetóduson belül van, és így tovább.
Példák
| Példa kifejezésre | Description |
|---|---|
1 |
Egész szám literál. |
| NoYes::Nem | Egy enumerálási hivatkozás. |
A |
Változóhivatkozás. |
| Adós::Find("1") | Statikus metódushívás (egy ügyfélváltozót ad vissza). |
| (A > 3 ? igaz : hamis) | Ha-kifejezés, amely igaz vagy hamis értéket ad vissza. |
| (válassza a CustTable where CustTable.Account == "100"). NameRef | Egy kijelölési kifejezés. Az ügyféltábla nameref mezőjét adja vissza. Ez egy sztring. |
| A >= B | Logikai kifejezés. Igaz vagy hamis értéket ad vissza. |
| A + B | Aritmetikai kifejezés. Az A és a B összegzése. |
| A + B / C | Kiszámítja a B/C értéket, majd hozzáadja az A-hez. |
| ~A + ez. Érték() | A bináris nem A értéket és a metódushívási érték eredményét összegzi a hatókörben lévő objektumon (ez). |
| Adós::Find("1"). NameRef | A talált ügyfélrekord NameRef mezőjét adja vissza. |
| Adós::Find("1"). Egyenleg() | Metódushívás Balance az ügyféltáblában (Adós::Az ügyfél megkeresése egy ügyfelet ad vissza). Az ügyfél egyenlegét adja vissza az 1-es számlaszámmal. |
AZ EBNF áttekintése
A Kiterjesztett Backus Naur Form (EBNF) egy metalanguage, és ebben az útmutatóban a nyelv szintaxisának leírására szolgál. Az EBNF-definíció éles szabályokból, nemterminálisokból és terminálokból áll. A kulcskifejezések az alábbi táblázatban láthatók.
| Kulcskifejezések | Example | Description |
|---|---|---|
| Terminálok | Work_Team | A terminál egy karakter vagy egy karaktersorozat, amely soha nem változik. |
| Nemterminálisok | Employee |
A nemterminális egy érvényes mondat egy részének leírása a nyelvben, amelyet egy éles szabály vagy szöveges leírás határoz meg. A nemterminális szimbólumok mindig kibonthatók egy vagy több terminálszimbólumra. |
| Éles szabályok | Alkalmazott = Fejlesztő | Tester |
Example
Work_Team = Vezető alkalmazott {, Alkalmazott} Alkalmazott = Fejlesztő | Tesztelő Ez a példa egy Work_Team definiál, amely egy Manager és egy vagy több Employeesrészből áll. Az an Employee definíció szerint egy Developer, vagy egy Tester. A példában használt szimbólumokat az alábbi táblázat ismerteti.
Speciális szimbólumok az EBNF-ben
| Szimbólum | Description |
|---|---|
| (Kifejezés) | A zárójelek a szimbólumokat (terminálokat és nemtermieket) együtt tartják. Az éles szabály jobb oldalán bárhol elhelyezhetők. |
| Kifejezés1 | Kifejezés2 |
| [Kifejezés] | Nem kötelező: Az [és ] közötti elemek nem kötelezőek. A zárójelekben szereplő elemek mindegyike vagy egyike sem szerepel benne. |
| {Expression} | Ismétlés: A(z) { és } közötti elemek nem kötelezőek, de szükség szerint többször megismételhetők. |
Ha például a kerékpárhoz vásárolt tartozékok nyeregből, vízpalacktartókból, harangokból és szarvakból állnak, és harang vagy kürt, nulla, egy vagy több vízpalacktartó és pontosan egy nyereg áll, ez a következőképpen fejezhető ki: Bicycle_Accessories = nyereg [harang | kürt] {water_bottle_holders} Ez a nyelvtan a következő lehetőségeket határozza meg: saddlesaddle bellsaddle horn nyereg water_bottle_holder nyeregharang water_bottle_holder nyeregharang water_bottle_holder water_bottle_holder És így tovább.
X++ nyelvhelyesség
Ez a cikk az X++ nyelv hivatalos nyelvtanát mutatja be.
A formális BNF-nyelvtan értelmezése
Ez a szakasz az X++ nyelvhelyességet ismerteti a Backus Naur Form (BNF) alkalmazásban. Itt bemutatunk egy kis példát a BNF-ről.
AA ::= BB CC_SYM
BB ::= JJ_SYM
::= KK_SYM
AA egy éles szabály neve. Az egyikhez AA szükség van egy BB, majd egy CC_SYM. Az A BB is éles szabály.
BB Ezért nem terminál.
BB JJ_SYM vagy KK_SYM kell lennie. A JJ_SYM és a KK_SYM is terminálok, mert nem más éles szabályok nevei. CC_SYM is terminál.
Az X++ nyelvhelyességi BNF-ben a terminálok többsége _SYM a nevük utótagjaként.
Formális X++ nyelvhelyesség a BNF-ben
Ez a szakasz az X++ nyelvhelyességet meghatározó BNF-et tartalmazza.
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