Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Poznámka:
Skupiny zájmu komunity se teď přesunuly z Yammeru na Microsoft Viva Engage. Pokud se chcete připojit k komunitě Viva Engage a účastnit se nejnovějších diskuzí, vyplňte formulář Žádost o přístup k aplikaci Finance and Operations Viva Engage Community a zvolte komunitu, ke které se chcete připojit.
Tento článek obsahuje referenční informace o syntaxi pro X++.
Klíčová slova X++
Klíčová slova X++ zobrazená v následující tabulce jsou vyhrazena. Tato klíčová slova nelze použít k žádnému jinému účelu.
| Rezervované slovo | Description | Související informace |
|---|---|---|
| ! | Ne. | Relační operátory |
| != | Operátor nerovnosti (nerovná se). | Relační operátory |
| # | Předpona názvů maker | Postupy: Použití #define a #if k otestování makra |
| & | Binární funkce AND. | Aritmetické operátory |
| && | Logický operátor AND. | Relační operátory |
| ( | Operátor volání funkce, který označuje začátek volání funkce. | |
| ) | Operátor volání funkce, který označuje konec volání funkce. | |
| * | Násobit. Hvězdička (*) se také používá v jazyce X++ SQL. Jedním z použití je znaménko všech polí z tabulek v select příkazu. Dalším použitím je zástupný znak s operátorem like , který označuje 0 až mnoho znaků jakéhokoli druhu. Operátor like také používá znak ? . |
Aritmetické operátory |
| ^ | Binární XOR. | Aritmetické operátory |
| | | Binární or. | Aritmetické operátory |
| || | Logický operátor OR. | Relační operátory |
| ~ | Ne. | Aritmetické operátory |
| + | Plus. | Aritmetické operátory |
| ++ | Přírůstek. | Operátory přiřazení |
| += | Sčítání přiřazení. | Operátory přiřazení |
| , | Operátor čárky. Výrazy oddělené čárkami se vyhodnocují postupně zleva doprava. | |
| - | Minus. | Aritmetické operátory |
| -- | Operátor dekrementace | Operátory přiřazení |
| -= | Dílčí přiřazení. | Operátory přiřazení |
| . | Operátor přístupu člena třídy, formRun.run například přistupuje k run metodě objektu typu FormRuntřídy . |
|
| / | Rozdělit. | Aritmetické operátory |
| \ | Řídicí znak v řetězcích. Uvozovky navíc uvozovky a určitá písmena, například \t pro tabulátor. | |
| @ | Únikklíčovýchch Například se nepodaří zkompilovat bez znakuvar @str = 1@abstract;, který způsobí, @ že se za identifikátorem považuje jakýkoli řetězec za ním. Ovlivňuje také literální řetězce tím, že neguje účinek řídicího znaku \ a tím, že umožní řetězci překlenovat více než jeden řádek ve zdrojovém kódu. Nový řádek je reprezentován jedním znakem šestnáctkového 0x0A, který se běžně označuje jako přímka. V 0x0D0A není zahrnut žádný znak návratového znaku šestnáctkového 0x0D. | |
| : | Znak dvojtečky (:) slouží k oddělovači hodnot velkých písmen v switch příkazu. |
|
| :: | Používá se k volání statických metod (class): ClassName::methodName() a k určení literálů výčtu, například NoYes::Yes. | |
| ; | Ukončí příkazy. Používá se ve for smyčce nebo jako oddělovač inicializátoru, aktualizace a kontrolních částí hodnot. |
|
| < | Méně než. | Relační operátory |
| << | Levý posun. | Aritmetické operátory |
| <= | Menší než nebo rovno. | Aritmetické operátory |
| = | Operátor přiřazení. Argument vlevo od "=" je nastaven na hodnotu argumentu vpravo. | Operátory přiřazení |
| == | Vrátí hodnotu true, pokud jsou výrazy stejné. | Relační operátory |
| > | Větší než. | Relační operátory |
| >= | Větší než nebo rovno. | Relační operátory |
| >> | Bitový pravý posun. Tento operátor posune bity na levé straně o množství na pravé straně. Každá směna v podstatě vydělí číslo číslem 2^n, kde n je počet posunutých pozic. | Aritmetické operátory |
| ?: | Ternární operátor. Otazník (?) je také používán like operátorem k označení přesně jednoho znaku jakéhokoli druhu. Operátor like také používá znak. |
Ternární operátor (?) |
| [ | Deklarátor pole, otevřete. Musí se používat s "]". | |
| ] | Deklarátor pole, zavřete ho. Musí se používat s "[". | |
| { | Spustí složený příkaz, který může zase obsahovat nula nebo více příkazů. Složený příkaz končí nejbližší shodou "}". | |
| } | Označuje konec složeného příkazu popsaného výše. Před prvním z těchto příkazů musí být zobrazena hodnota {. | |
| abstract | Modifikátor tříd a metod
Abstraktní třídu nelze vytvořit pomocí nového klíčového slova – pouze třídy odvozené z ní mohou.
Abstraktní metodu nelze volat, pouze metody, které ji přepíší. Tabulku lze upravit jako abstraktní nastavením vlastnosti Abstraktní na Ano v AOT nebo pomocí DictTable třídy.
Abstraktní vlastnost je výchozí hodnota Ne a nelze ji nastavit, pokud není tabulka rozšířena jinou tabulkou. Každý řádek v abstraktní tabulce musí mít závislý řádek v odvozené tabulce. To znamená, že každý řádek v abstraktní tabulce má hodnotu větší než nula v poli vlastnosti InstanceRelationType . Označení tabulky jako abstraktní nejsou žádné další efekty. Programátoři často používají termín beton k popisu třídy, která není abstraktní. |
Přehled dědičnosti tabulek modifikátorů metod |
| anytype | Typ, který může obsahovat hodnoty libovolného typu. | Libovolný typ |
| protože | Je potřeba, když přiřadíte proměnnou základní třídy odvozené proměnné třídy. Například vzhledem k Derived třídě, která rozšiřujeBase třídu, příkaz myDerived = myBase as Derived; zabraňuje chybě kompilátoru pomocí klíčového slova. Toto klíčové slovo platí také v případě, že přiřadíte proměnnou základní tabulky odvozené tabulce. Pokud hodnota (myBase) není určeného typu (Derived), vrátí výraz hodnotu null. |
Operátory výrazů: Is a As for Dědičnost |
| Asc | Možnost pro klauzuli orderby nebo groupby klauzuli v select příkazu Řazení je vzestupné. |
Syntaxe příkazu Select |
| at | Určuje pozici okna tisku jako součást print příkazu. Příkaz print by neměl být použit. |
Příkazy Print |
| průměrný | Vrátí průměr polí z řádků určených group by klauzulí v select příkazu. |
Syntaxe příkazu Select |
| break | Okamžitý výstup z iterativního bloku kódu. | Break – příkazy |
| bod přerušení | Představuje zarážku nastavenou pro účely ladění. Pokud chcete nastavit zarážku v kódu, napište: breakpoint; |
|
| vedle | Část rezervovaného termínu, například seskupování podle a řazení podle. | |
| byref | Určuje, že parametr předaný do volané metody je předán odkazem (adresa) místo hodnotou. Byref se používá v X++ při volání metody .NET, která přebírá parametr odkazem (například s klíčovými slovy jazyka C# out nebo ref). | Postupy: Použití klíčového slova byref pro interoperabilitu CLR |
| případ | Výběr v rámci switch příkazu |
Příkazy Switch |
| chytit | Používá se při zpracování výjimek. | Zpracování výjimek pomocí try a zachycení klíčových slov |
| changeCompany | Změní nastavení databáze na jinou společnost. | Změna vzoru návrhu společnosti |
| třída | Deklaruje třídu. | Třídy v X++ |
| klient | Modifikátor metody Tyto modifikátory se už nepoužívají. Všechny metody se spouští na úrovni serveru. | Modifikátory metody |
| kontejner | Určuje container typ. Kontejnery obsahují posloupnost atomických hodnot a dalších kontejnerů. |
Containers |
| continue | Vynutí další iteraci smyčky. | Příkazy Continue |
| počet | Vrátí počet záznamů z řádků určených group by klauzulí v select příkazu. |
Syntaxe příkazu Select |
| crossCompany | Způsobí, že příkaz select vrátí data pro všechny společnosti, ze které má uživatel oprávnění číst. |
Základy kódu X++ mezi společnostmi |
| date | Určuje proměnnou typu date. |
Kalendářní data |
| default | Výchozí velká a malá písmena v příkazech switch . Blok kódu ve výchozí části se provede, pokud hodnota přepínače neodpovídá žádné klauzuli case poskytnuté v switch příkazu. |
Příkazy Switch |
| delegate | Člen třídy, který je schopen uložit více odkazů na metody v jiných třídách a volat všechny tyto metody po zobrazení výzvy k tomu. Delegát může ukládat odkazy na různé druhy metod, včetně následujících:
|
Terminologie událostí a klíčová slova X++, porovnání jazyka C#: Událost |
| delete_from | Umožňuje odstranit záznamy z databáze. | delete_from |
| Desc | Možnost pro klauzuli order by nebo group by klauzuli v select příkazu Řazení je sestupné. |
Syntaxe příkazu Select |
| ukázat | Modifikátor metody
Metoda zobrazení</zobrazení> slouží k zobrazení počítaných hodnot v ovládacím prvku formuláře. Na rozdíl od běžných polí nejsou tyto hodnoty uloženy v databázi, ale jsou vypočteny dynamicky. |
Modifikátory metody |
| div | Celočíselné dělení. | Aritmetické operátory |
| dělat | Začátek smyčky do...while |
Dělat... while Loops |
| upravit | Modifikátor metody Metoda edit v X++ umožňuje uživatelům upravovat hodnoty v ovládacím prvku formuláře při provádění vlastní logiky. Na rozdíl od display metod, které zobrazují jenom počítané hodnoty, umožňují metody úprav zobrazení i úpravy.
|
Modifikátory metody |
| jinak (else) | Podmíněné spuštění (if...else). Část elseif příkazu se provede, pokud je výraz v příkazu if vyhodnocen jako false |
pokud a pokud ... else – příkazy |
| eventHandler | Je nutné použít pokaždé, když buď přidáte nebo odstraníte odkaz na metodu z delegáta pomocí operátoru += nebo -= operátoru. Příklad: myDelegate += eventHandler(OtherClass::myStaticMethod); | Terminologie událostí a klíčová slova X++, porovnání jazyka C#: Událost |
| existuje | Používá se s join klauzulemi v select příkazech. |
Syntaxe příkazu Select |
| rozšiřuje | Deklarace třídy nebo rozhraní. Pokud vaše třída explicitně nerozšíří jinou třídu, považuje se vaše třída za rozšíření Object třídy (jako byste napsali "extends Object"). |
Vytvoření podtřídy |
| falešný | Logický literál. | Logické hodnoty |
| závěrečný | Modifikátor tříd a metod Určuje, že tuto metodu nelze přepsat. | Modifikátory metody |
| firstFast | Používá se v select příkazech ke zrychlení načítání prvního řádku. |
Syntaxe příkazu Select |
| firstOnly | Používá se v select příkazech k načtení pouze prvního záznamu. Klíčové firstOnly slovo nezaručuje, že příkaz X++ SQL select načte maximálně jeden záznam. Pokud může AOS použít EntireTable mezipaměť ke splnění požadavků select na data příkazu, firstOnly klíčové slovo se ignoruje. |
Ukládání do mezipaměti založené na sadě syntaxe příkazu Select |
| firstOnly10 | Stejné jako prvníOnly, s výjimkou 10 řádků místo jednoho. | |
| firstOnly100 | Stejné jako firstOnly, s výjimkou 100 řádků místo jednoho. | |
| firstOnly1000 | Stejné jako prvníOnly, s výjimkou 1 000 řádků místo jednoho. | |
| flush | Vymaže celou mezipaměť tabulky. To může být užitečné, když chcete zajistit, aby se všechny změny provedené v tabulce okamžitě projevily v následných operacích. | Ukládání do mezipaměti založené na sadě |
| for | Iterace smyčky. | Smyčky for |
| forceLiterals | Používá se v select příkazech k odhalení skutečných hodnot, které se používají v where klauzulích k databázi Microsoft SQL Serveru v době optimalizace. |
Syntaxe příkazu Select |
| forceNestedLoop | Vynutí databázi SQL Serveru použít algoritmus vnořené smyčky ke zpracování konkrétního příkazu SQL obsahujícího .join |
Syntaxe příkazu Select |
| forcePlaceholders | Používá se v select příkazech k pokynu jádru, aby nezozoroval skutečné hodnoty použité v where klauzulích do databáze Microsoft SQL Serveru v době optimalizace. |
Syntaxe příkazu Select |
| forceSelectOrder | Vynutí databázi SQL Serveru přístup k tabulkám ve spojení v zadaném pořadí. | Syntaxe příkazu Select |
| forUpdate | Vybere záznamy výhradně pro aktualizaci. Operace, která se má provést u načtených záznamů, je aktualizace. V závislosti na podkladové databázi mohou být záznamy uzamčeny pro ostatní uživatele. | Syntaxe příkazu Select |
| od |
select Část příkazu Klauzule from určuje vyrovnávací paměť tabulky, ve které sloupce existují. |
Syntaxe příkazu Select |
| group |
group by Část klauzule v select příkazu |
Syntaxe příkazu Select |
| if | Podmíněné spuštění. | pokud a pokud ... else – příkazy |
| implementuje | Provádění .interface |
Přehled rozhraní |
| insert_recordset | Zkopíruje data z jedné nebo více tabulek do jedné výsledné cílové tabulky na jedné serverové cestě. | insert_recordset |
| int | Určuje proměnnou typu integer (32bitová verze). |
Celá čísla |
| int64 | Určuje proměnnou typu integer (64bitová verze). |
Celá čísla |
| interface | Deklarace rozhraní. | Přehled rozhraní |
| is | Zeptá se, zda objekt odkazovaný proměnnou třídy buď dědí z dané třídy, nebo je z dané třídy. Například vzhledem k Derived třídě, která rozšiřujeBase třídu, výraz (myDerived is Base) vrátí hodnotu true. Toto klíčové slovo platí pro dědičnost tříd a dědičnost tabulek. |
Operátory výrazů: Is a As for Dědičnost |
| join | Tabulky jsou spojené se sloupci běžnými pro obě tabulky. Pomocí spojení můžete vygenerovat jednu sadu výsledků na základě více tabulek. | Syntaxe příkazu Select |
| jako | Testuje shody podle vzoru se zástupnými symboly *a ?. | Relační operátory |
| maxof | Vrátí maximum polí z řádků určených klauzulí group by . |
Syntaxe příkazu Select |
| minof | Vrátí minimum polí z řádků určených klauzulí group by . |
Syntaxe příkazu Select |
| mod | Vrátí celočíselnou část levého výrazu1 dělenou pravým výrazem2. Neformálně se tomu říká operátor modulo.
(12 mod 7) == 5 je pravda. |
|
| new | Operátor. Vytvoří instanci třídy nebo přidělí paměť pro pole. | |
| next | Načte další záznam v tabulce nebo zavolá další metodu v posloupnosti příkazů. | |
| noFetch | Označuje, že se teď nenačítají žádné záznamy. | Syntaxe příkazu Select |
| notExists | Používá se s join klauzulemi v select příkazech. |
Syntaxe příkazu Select |
| nula | Symbolická konstanta. | |
| optimistický zámek | Vynutí spuštění příkazu s optimistickým řízením souběžnosti, i když je v tabulce nastavená jiná hodnota. | Syntaxe příkazu Select |
| objednávka |
order by Část klauzule v select příkazu |
Syntaxe příkazu Select |
| vnější | vnější spojení. | Syntaxe příkazu Select |
| pause | Zastaví provádění úlohy. Uživateli se zobrazí výzva, aby uvedl, jestli má pokračovat spuštění. Tento příkaz byste neměli používat v produkčním kódu. | Select – příkazy |
| pesimisticLock | Vynutí spuštění příkazu s pesimistickým řízením souběžnosti, i když je v tabulce nastavená jiná hodnota. | Syntaxe příkazu Select |
| Umožňuje zobrazit výstup na obrazovce. Tento příkaz byste neměli používat v produkčním kódu. | Příkazy Print | |
| privátní | Modifikátor přístupu metody Metodu lze použít pouze v rámci třídy, která deklaruje metodu. | Řízení přístupu metody |
| chráněno | Modifikátor přístupu metody Metodu lze použít z metod ve třídě deklarující metody a v jakékoli odvozené třídy. | Řízení přístupu metody |
| public | Modifikátor přístupu metody Metoda může být volána z jakékoli třídy. | Řízení přístupu metody |
| skutečné | Určuje real typ, desítkový typ bez chyb zaokrouhlení. |
Sféry |
| repeatableRead | Určuje, že žádné jiné transakce nemohou upravovat data, která byla načtena logikou uvnitř aktuální transakce, dokud se aktuální transakce nedokončí. Explicitní transakce se dokončí buď ttsAbort , nebo na nejkrajnější ttsCommit. Pro samostatný příkaz select je doba trvání transakce doba trvání příkazu select . Databáze ale někdy vynucuje ekvivalent repeatableRead v jednotlivých příkazech select i bez tohoto klíčového slova, které se zobrazí v kódu X++ (v závislosti na tom, jak se databáze rozhodne prohledat tabulky). | Další informace najdete v dokumentaci k podkladovému produktu relační databáze. |
| zkusit ještě jednou | Používá se při zpracování výjimek. | Zpracování výjimek pomocí try a zachycení klíčových slov |
| return | Vrátí z metody. | Deklarace metod |
| reverse | Záznamy se vrátí v obráceném pořadí. | Syntaxe příkazu Select |
| vybrat | Klauzule select určuje, které sloupce nebo zobrazení se zobrazí ve sadě výsledků. |
Select – příkazy |
| server | Modifikátor metody Tento modifikátor je ignorován a neměl by se používat, protože všechny metody se spouští na straně serveru. | Modifikátory metody |
| nastavení | Používá se s příkazem update_recordset . | update_recordset |
| statické | Statické metody nemusí odkazovat na proměnné instance (pouze na statické proměnné); může být vyvolána pomocí názvu třídy namísto instance třídy ("MyClass.aStaticProcedure"). |
Modifikátory metody |
| Str | Určuje string typ. |
Řetězce |
| suma | Vrátí součet polí z řádků určených group by klauzulí v select příkazu. |
Syntaxe příkazu Select |
| super | Volá metodu, která byla přepsána aktuální metodou. | Metody tabulky |
| vypínač | Switch – příkaz. | Příkazy Switch |
| tableLock | Zastaralý; TableLock už není k dispozici. | |
| toto | Odkaz na aktuální instanci třídy. Používá se v kódu X++ uvnitř metody instance třídy. Slouží k odkazování na členy metody třídy. | |
| hodit | Používá se při zpracování výjimek. | Zpracování výjimek pomocí try a zachycení klíčových slov |
| pravdivý | Logický literál. | Logické hodnoty |
| zkusit | Používá se při zpracování výjimek. | Zpracování výjimek pomocí try a zachycení klíčových slov |
| ttsAbort | Vrátit zpět (tj. zahodit) všechny změny v aktuální transakci. | Integrita transakcí |
| ttsBegin | Označí začátek transakce. | Integrita transakcí |
| ttsCommit | Označí konec transakce a potvrdí změny v tabulkách. | Integrita transakcí |
| update_recordset | Umožňuje manipulaci se sadami řádků v rámci jedné operace. | update_recordset |
| validTimeState | Filtruje řádky načtené z platné tabulky stavu času příkazem X++ SQL select . Příklad: select validTimeState(myDateEffective) * from xMyTable; ... nebo... select validTimeState(myDateFrom, myDateTo) * from xMyTable; |
Účinky platných tabulek stavu času na operace čtení a zápisu |
| prázdnota | Identifikuje metodu, která nevrací hodnotu. | Deklarace metod |
| where |
select Část příkazu Klauzule where určuje podmínky, které mají být splněny. To znamená řádky, které chcete zahrnout do výsledku. |
Syntaxe příkazu Select |
| zatímco | Iterační příkaz. Spustí příkaz opakovaně, pokud je podmínka testu pravdivá. | While loops while select – příkazy |
| okno | Umožňuje změnit velikost okna výstupu. Používá se s příkazy print</print> , které se v produkčním kódu nedoporučují. |
Příkazy Print |
Syntaxe výrazů
Výraz v jazyce X++ se používá matematickým nebo logickým způsobem. Výrazy jsou založeny na datových typech jazyka; to znamená, že výraz vždy vrací hodnotu určitého typu. Tuto hodnotu lze použít ve výpočtech, přiřazeních, podmíněných příkazech atd.
Popis výrazů EBNF v X++
| Term | Definition | |
|---|---|---|
| Expression | = | Simple-expression [RelationalOperator Simple-expression ] |
| RelationalOperator | = | = |
| Jednoduchý výraz | = | Jednoduchý výraz [ + |
| Term | = | Compfactor { Mult-operator CompFactor } |
| Mult-operator | = | * |
| CompFactor | = | [ ! ] [ - |
| Faktor | = | Literal |
| Enum | = | Název výčtu :: Literál |
| Variable | = | Identifikátor [ [ výraz ] ] [ . Výraz ] |
| FunctionCall | = | [ Výraz (. |
| Výraz If | = | Výraz? Výraz: Výraz |
Sémantická omezení se vztahují na předchozí syntaxi. Pomocí operátoru :: nelze volat žádnou metodu. Podobně nemůžete použít toto klíčové slovo bez aktivního objektu; to znamená, že pokud nejste v metodě instance atd.
Examples
| Příklad výrazu | Description |
|---|---|
1 |
Celočíselná literál. |
| NoYes::Ne | Referenční informace k výčtu. |
A |
Odkaz na proměnnou. |
| Dlužník::Find("1") | Statické volání metody (vrátí proměnnou zákazníka). |
| (A > 3 ? true : false) | Výraz if, který vrací hodnotu true nebo false. |
| (vyberte CustTable where CustTable.Account == "100"). NameRef | Výraz select. Vrátí pole nameref v tabulce zákazníka. Jedná se o řetězec. |
| A >= B | Logický výraz. Vrátí hodnotu true nebo false. |
| A+B | Aritmetický výraz. Součet A a B. |
| A + B / C | Vypočítá B/C a pak ho přidá do A. |
| ~A + tohle. Value() | Sums binary not A and result of the method-call Value on the object in scope (this). |
| Dlužník::Find("1"). NameRef | Vrátí pole NameRef nalezeného záznamu zákazníka. |
| Dlužník::Find("1"). Zůstatek() | Volání metody Balance v tabulce zákazníka (Dlužník::Find vrátí zákazníka). Vrátí zůstatek zákazníka s číslem účtu 1. |
Přehled EBNF
Extended Backus Naur Form (EBNF) je metalanguage a používá se v této příručce k popisu syntaxe jazyka. Definice EBNF se skládá z produkčních pravidel, neterminálů a terminálů. Klíčové termíny jsou uvedeny v následující tabulce.
| Klíčové termíny | Example | Description |
|---|---|---|
| Terminály | Work_Team | Terminál je jeden znak nebo řetězec znaků, které se nikdy nemění. |
| Neterminály | Employee |
Netermiální je popis části platné věty v jazyce, který je definován buď produkčním pravidlem, nebo textovým popisem. Netermiální symbol lze vždy rozšířit na jeden nebo více symbolů terminálu. |
| Produkční pravidla | Employee = Developer | Tester |
Example
Work_Team = zaměstnanec manažera {, zaměstnanec} zaměstnanec = vývojář | Tester Tento příklad definuje Work_Team jako skládající se z Manager a jednoho nebo více Employees. Je Employee definována jako nebo DeveloperTester. Symboly použité v příkladu jsou popsány v následující tabulce.
Speciální symboly v EBNF
| Symbol | Description |
|---|---|
| (Výraz) | Závorky drží symboly (terminály a neterminaly) společně. Mohou být umístěny kdekoli na pravé straně výrobního pravidla. |
| Výraz 1 | Výraz 2 |
| [Výraz] | Volitelné: Položky mezi [ a ] jsou volitelné. Všechny nebo žádné položky v hranatých závorkách nejsou zahrnuty. |
| {Expression} | Opakování: Položky mezi { a } jsou volitelné, ale je možné je opakovat tolikrát, kolikrát je to nutné. |
Pokud se například doplňky, které si koupíte pro kolo, tvoří sedlo, držáky lahví vody, zvonky a rohy a můžete mít buď zvon, roh, a nulu, jednu nebo více držáků lahví vody a přesně jedno sedlo, může to být vyjádřeno takto: Bicycle_Accessories = sedlo [zvon | roh] {water_bottle_holders} Tato gramatika definuje následující možnosti: saddlesaddle bellsaddle horn water_bottle_holder sedlový zvon water_bottle_holder zvonek water_bottle_holder water_bottle_holder water_bottle_holder water_bottle_holder a tak dále.
Gramatika X++
Tento článek ukazuje formální gramatiku jazyka X++.
Jak interpretovat formální gramatiku BNF
Tato část popisuje gramatiku X++ ve formuláři Backus Naur Form (BNF). Tady je popsaný malý příklad BNF.
AA ::= BB CC_SYM
BB ::= JJ_SYM
::= KK_SYM
AA je název produkčního pravidla. Vyžaduje AA CC_SYM BB, po kterém následuje CC_SYM. A BB je také produkční pravidlo.
BB Proto není terminál.
BB musí být JJ_SYM nebo KK_SYM. JJ_SYM i KK_SYM jsou terminály, protože nejsou názvy jiných výrobních pravidel. CC_SYM je také terminál.
V jazyce BNF pro gramatiku X++ má většina terminálů _SYM jako přípona jejich názvu.
Formální gramatika X++ v BNF
Tato část obsahuje BNF, která definuje gramatiku X++.
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