Merk
Tilgang til denne siden krever autorisasjon. Du kan prøve å logge på eller endre kataloger.
Tilgang til denne siden krever autorisasjon. Du kan prøve å endre kataloger.
Denne artikkelen gir syntaksreferansen for X++.
X++ keywords
Tabellen nedenfor viser reserverte X++-nøkkelord. Du kan ikke bruke disse nøkkelordene til noe annet formål.
| Reserved word | Description | Related information |
|---|---|---|
| ! | Not. | Relational Operators |
| != | Ulikhetsoperator (ikke lik). | Relational Operators |
| # | Prefiks på makronavn. | Slik bruker du #define og #if til å teste en makro |
| & | Binary AND. | Arithmetic Operators |
| && | Logical AND. | Relational Operators |
| ( | Funksjonsanropsoperator, som angir begynnelsen av funksjonskallet. | |
| ) | Funksjonsanropsoperator, som angir slutten på funksjonskallet. | |
| * | Multiply. Stjernen (*) brukes også i X++ SQL. Én bruk er å betegne alle felt fra tabellene i en select setning. En annen bruk er som et jokertegn med operatoren like , for å betegne 0 til mange tegn av noe slag. Operatoren like? bruker også tegnet. |
Arithmetic Operators |
| ^ | Binary XOR. | Arithmetic Operators |
| | | Binary OR. | Arithmetic Operators |
| || | Logical OR. | Relational Operators |
| ~ | Not. | Arithmetic Operators |
| + | Plus. | Arithmetic Operators |
| ++ | Increment. | Assignment Operators |
| += | Additive assignment. | Assignment Operators |
| , | Comma operator. Uttrykk atskilt med komma evalueres sekvensielt fra venstre mot høyre. | |
| - | Minus. | Arithmetic Operators |
| -- | Decrement operator. | Assignment Operators |
| -= | Subtractive assignment. | Assignment Operators |
| . | Tilgangsoperator for klassemedlemmer får for eksempel formRun.run tilgang til run metoden for et objekt av klassetypen FormRun. |
|
| / | Divide. | Arithmetic Operators |
| \ | Escape i strenger. Unnslipper ekstra anførselstegn, og visse bokstaver som '\t' for tab. |
|
| @ | Rømning av nøkkelord. Kan for eksempel ikke kompilere uten var @str = 1@abstract; tegnet som fører til at strenger som følger den, @ anses som en identifikator. Det påvirker også litterale strenger, ved å oppheve effekten av \ escape-tegnet, og ved å aktivere strengen for å strekke seg over mer enn én linje i kildekoden. Den nye linjen representeres av ett tegn med heksadesimal 0x0A, som vanligvis kalles en linjefeed. Ingen vognreturtegn for heksadesimal 0x0D er inkludert, som i 0x0D0A. |
|
| : | Kolon (:)-tegnet brukes for å avgrense kasusverdier i setningen switch . |
|
| :: | Brukes til å kalle statiske (klasse) metoder: ClassName::methodName() and to designate enumeration literals, like NoYes::Yes. |
|
| ; | Terminates statements. Brukes i for løkker eller som skilletegn for initialiserings-, oppdaterings- og verdikontrolldeler. |
|
| < | Less than. | Relational Operators |
| << | Left shift. | Arithmetic Operators |
| <= | Mindre enn eller lik. | Arithmetic Operators |
| = | Assignment operator. Argumentet til venstre for «=» er satt til verdien for argumentet til høyre. | Assignment Operators |
| == | Returnerer sann hvis uttrykkene er like. | Relational Operators |
| > | Greater than. | Relational Operators |
| >= | Større enn eller lik. | Relational Operators |
| >> | Bitvis høyre skift. Denne operatoren flytter biter i venstre side av beløpet på høyre side. Hvert skift deler effektivt tallet med 2^n, der n er antall forskjøvet posisjoner. | Arithmetic Operators |
| ?: | Ternary operator. Spørsmålstegnet (?)-tegnet brukes også av operatøren like for å betegne nøyaktig ett tegn av hvilken som helst type. Operatoren like* bruker også tegnet. |
Ternær operator (?) |
| [ | Matrisedeklarator, åpne. Må brukes med ]. | |
| ] | Matrisedeklarator, lukk. Må brukes med [. | |
| { | Starter en sammensatt setning som igjen kan inneholde null eller flere setninger. Den sammensatte setningen slutter med den nærmeste samsvarende "}". | |
| } | Angir slutten på den sammensatte setningen som er beskrevet ovenfor. En {må vises før den første av disse setningene. | |
| abstract | Klasse- og metodeendringsprogram. En abstrakt klasse kan ikke konstrueres med det nye nøkkelordet - Bare klassene avledet fra det kan. En abstrakt metode kan ikke kalles, bare metoder som overstyrer den. En tabell kan endres som abstrakt ved å sette dens Abstract-egenskap til Ja i AOT, eller ved å bruke klassen.DictTable Egenskapen Abstract er som standard til Nei, og den kan ikke settes med mindre tabellen utvides med en annen tabell. Hver rad i en abstrakt tabell må ha en avhengig rad i en avledet tabell. Dette betyr at hver rad i en abstrakt tabell har en verdi større enn null i sitt egenskapsfelt InstanceRelationType. Det er ingen andre effekter ved å merke en tabell som abstrakt. Uformelt bruker programmerere ofte begrepet konkret for å beskrive en klasse som ikke er abstrakt. |
Oversikt over tabellarv for metodeendring |
| anytype | En type som kan inneholde verdier av alle typer. | Anytype |
| as | Nødvendig når du tilordner en basisklassevariabel til en avledet klassevariabel. For eksempel, gitt en Derived klasse som utvider en Base klasse, unngår setningen myDerived = myBase as Derived; en kompilatorfeil ved å bruke som nøkkelord. Dette nøkkelordet gjelder også når du tilordner en basistabellvariabel til en avledet tabellvariabel. Hvis verdien (myBase) ikke er av den angitte typen (avledet), returnerer uttrykket null. |
Uttrykksoperatorer: Is og As for Inheritance |
| asc | Et alternativ på orderby eller - groupby setningen i en select setning. Sorteringen er stigende. |
Velg setningssyntaks |
| at | Angir plasseringen av et utskriftsvindu som en del av en print setning. Utskriftssetningen skal ikke brukes. |
Print Statements |
| avg | Returnerer gjennomsnittet av feltene fra radene som er angitt av setningsdelen group by i et select uttrykk. |
Velg setningssyntaks |
| break | Umiddelbar utgang fra en gjentakelseskodeblokk. | Break Statements |
| breakpoint | Representerer et bruddpunkt som er angitt for feilsøkingsformål. Hvis du vil angi et bruddpunkt i koden, skriver du: breakpoint; |
|
| by | Del av en reservert term, for eksempel grupper etter og bestill etter. | |
| byref | Spesifiserer at parameteren som sendes til den oppkalte metoden sendes via referanse (adresse), i stedet for med verdi. Byref brukes i X++ når du kaller en .NET-metode som tar en parameter etter referanse (for eksempel med C#-nøkkelordene ut eller ref). | Slik bruker du byref-nøkkelordet for CLR Interop. |
| case | Valg i en switch setning. |
Switch Statements |
| catch | Brukes i unntaksbehandling. | Unntaksbehandling med forsøk og fange opp nøkkelord |
| changeCompany | Endrer databaseinnstillinger til et annet firma. | Endre utformingsmønster for firmaet |
| class | Erklærer en klasse. | Klasser i X++ |
| container | Angir container typen. Beholdere inneholder en sekvens av atomverdier og andre beholdere. |
Containers |
| continue | Tvinger neste gjentakelse av en løkke. | Continue Statements |
| count | Returnerer antall poster fra radene som er angitt av group by setningsdelen i en select setning. |
Velg setningssyntaks |
| crossCompany | Fører til at en select setning returnerer data for alle firmaer som brukeren har tillatelse til å lese fra. |
Grunnleggende om X++-kode på tvers av firma |
| date | Angir en variabel av typen date. |
Dates |
| default | Standardtilfelle i switch setninger. Kodeblokken i standarddelen kjøres hvis switch-verdien ikke samsvarer med noen av case klausulene i setningen switch . |
Switch Statements |
| delegate | Et klassemedlem som kan lagre flere referanser til metoder i andre klasser, og kalle alle disse metodene når de blir bedt om det. En delegat kan lagre referanser til ulike typer metoder, inkludert følgende: statiske metoder på X++-klasser; instansmetoder på X++-klasser; metoder på .NET Framework-klasser. | Hendelsesterminologi og nøkkelord X++, C# Sammenligning: Hendelse |
| delete_from | Sletter poster fra databasen. | delete_from |
| desc | Et alternativ på order by eller - group by setningen i en select setning. Sorteringen er synkende. |
Velg setningssyntaks |
| display | Method modifier. En metode viser beregnede verdier display i en formkontroll. I motsetning til vanlige felt, lagres ikke disse verdiene i databasen, men beregnes dynamisk. |
Method Modifiers |
| div | Integer division. | Arithmetic Operators |
| do | Begynnelsen av en do...while løkke. |
Do...while Loops |
| edit | Method modifier. En edit metode i X++ gjør det mulig for brukere å endre verdier i en skjemakontroll mens de utfører egendefinert logikk. I motsetning til display metoder, som kun viser beregnede verdier, edit muliggjør metodene både visning og redigering. |
Method Modifiers |
| else | Betinget kjøring (if...else). Den else delen av if utsagnet utføres hvis uttrykket i if-setningen evaluerer til false. |
hvis og hvis ... andre setninger |
| eventHandler | Må brukes hver gang du enten legger til eller sletter en metodereferanse fra en representant ved hjelp av eller += -operatoren-=. For eksempel: myDelegate += eventHandler(OtherClass::myStaticMethod); |
Hendelsesterminologi og nøkkelord X++, C# Sammenligning: Hendelse |
| exists | Brukes med join setningsdeler i select setninger. |
Velg setningssyntaks |
| extends | En klasse- eller grensesnittdeklarasjonssetning. Hvis klassen ikke eksplisitt utvider en annen klasse, anses klassen å utvide Object klassen (som om du hadde skrevet «utvider objektet»). |
Opprette en underklasse |
| false | Boolean literal. | Booleans |
| final | Klasse- og metodeendringsprogram. Angir at denne metoden ikke kan overstyres. | Method Modifiers |
| firstFast | Brukes i select setninger til å øke hastigheten på hentingen for den første raden. |
Velg setningssyntaks |
| firstOnly | Brukes i select setninger til å hente bare den første posten. Nøkkelordet firstOnly garanterer ikke at maksimalt én post hentes av en X++ SQL-setning select . Hvis AOS kan bruke hurtigbufferen EntireTable til å oppfylle datakravene til select setningen, firstOnly ignoreres nøkkelordet. |
Velg uttrykkssyntakssettbasert hurtigbufring |
| firstOnly10 | Samme som for det første, bortsett fra returnerer 10 rader i stedet for én. | |
| firstOnly100 | Samme som for det første, bortsett fra returnerer 100 rader i stedet for én. | |
| firstOnly1000 | Samme som for det første, bortsett fra returnerer 1000 rader i stedet for én. | |
| flush | Fjerner hele tabellhurtigbufferen. Denne handlingen kan være nyttig når du vil sikre at eventuelle endringer i tabellen umiddelbart reflekteres i påfølgende operasjoner. | Set-based Caching |
| for | For løkke gjentakelse. | For Loops |
| forceLiterals | Brukes i select setninger til å vise faktiske verdier som brukes i where setninger til Microsoft SQL Server-databasen på tidspunktet for optimalisering. |
Velg setningssyntaks |
| forceNestedLoop | Tvinger SQL Server-databasen til å bruke en nestet løkkealgoritme til å behandle en bestemt SQL-setning som inneholder en join. |
Velg setningssyntaks |
| forcePlaceholders | Brukes i select setninger til å be kjernen om ikke å vise de faktiske verdiene som brukes i where setninger til Microsoft SQL Server-databasen på optimaliseringstidspunktet. |
Velg setningssyntaks |
| forceSelectOrder | Tvinger SQL Server-databasen til å få tilgang til tabellene i en sammenføyning i den angitte rekkefølgen. | Velg setningssyntaks |
| forUpdate | Velger poster utelukkende for oppdatering. Operasjonen som utføres på postene som hentes, er en oppdatering. Avhengig av den underliggende databasen kan postene være låst for andre brukere. | Velg setningssyntaks |
| from | En del av en select setning. Klausulen from spesifiserer tabellbufferen som kolonnene eksisterer i. |
Velg setningssyntaks |
| group | En del av setningsdelen group by i en select setning. |
Velg setningssyntaks |
| if | Conditional execution. | hvis og hvis ... andre setninger |
| implements | Implementering av en interface. |
Interfaces Overview |
| insert_recordset | Kopierer data fra én eller flere tabeller til én resulterende måltabell på én enkelt servertur. | insert_recordset |
| int | Angir en variabel av typen integer (32-biters). |
Integers |
| int64 | Angir en variabel av typen integer (64-biters). |
Integers |
| interface | Interface declaration. | Interfaces Overview |
| is | Spør om objektet det refereres til av en klassevariabel, enten arver fra den angitte klassen eller er av den angitte klassen. Gitt for eksempel en Derived klasse som utvider en Base klasse, returnerer uttrykket (myDerived is Base)sann. Dette nøkkelordet gjelder klassearv og tabellarv. |
Uttrykksoperatorer: Is og As for Inheritance |
| join | Tabeller er sammenføyd i kolonner som er felles for begge tabellene. Du kan generere ett enkelt resultatsett basert på flere tabeller ved hjelp av sammenføyninger. | Velg setningssyntaks |
| like | Tester for treff etter mønster, med jokertegnene *og '?'. | Relational Operators |
| maxof | Returnerer maksimalt antall felt fra radene som er angitt av setningsdelen group by . |
Velg setningssyntaks |
| minof | Returnerer minimum av feltene fra radene som er angitt av setningsdelen group by . |
Velg setningssyntaks |
| mod | Returnerer heltallet som gjenstår av venstre uttrykk1 dividert med høyre uttrykk2. Uformelt kalles dette noen ganger modulooperatoren.
(12 mod 7) == 5 er sant. |
|
| new | Operator. Oppretter en forekomst av en klasse eller tildeler minne for en matrise. | |
| next | Henter den neste posten i en tabell eller kaller opp neste metode i en kommandokjedesekvens. | |
| noFetch | Angir at ingen poster skal hentes nå. | Velg setningssyntaks |
| notExists | Brukes med join setningsdeler i select setninger. |
Velg setningssyntaks |
| null | Symbolic constant. | |
| optimisticLock | Tvinger en setning til å kjøre med optimistisk samtidighetskontroll, selv om en annen verdi er angitt i tabellen. | Velg setningssyntaks |
| order | En del av setningsdelen order by i en select setning. |
Velg setningssyntaks |
| outer | outer join. | Velg setningssyntaks |
| pause | Stanser utførelsen av en jobb. Brukeren blir bedt om å angi om kjøringen skal fortsette. Du bør ikke bruke denne setningen i produksjonskode. | Select Statements |
| pessimisticLock | Tvinger en setning til å kjøre med pessimistisk samtidighetskontroll, selv om en annen verdi er angitt i tabellen. | Velg setningssyntaks |
| Lar deg vise utdata på skjermen. Du bør ikke bruke denne setningen i produksjonskode. | Print Statements | |
| private | Endring av metodetilgang. Metoden kan bare brukes i klassen som erklærer metoden. | Metodetilgangskontroll |
| protected | Endring av metodetilgang. Metoden kan brukes fra metoder i klassen som deklarerer metodene, og i alle avledede klasser. | Metodetilgangskontroll |
| public | Endring av metodetilgang. Metoden kan kalles fra en hvilken som helst klasse. | Metodetilgangskontroll |
| real | Angir real typen, en desimaltype uten avrundingsfeil. |
Reals |
| repeatableRead | Spesifiserer at ingen andre transaksjoner kan endre data som den nåværende transaksjonen leser før den nåværende transaksjonen er fullført. En eksplisitt transaksjon avsluttes enten ved ttsAbort eller ved ytterste ttsCommit. For et frittstående utvalgsuttrykk er transaksjonsvarigheten varigheten for utvalgskommandoen . Databasen håndhever imidlertid noen ganger tilsvarende repeatableRead i individuelle utvalgssetninger , selv uten at dette nøkkelordet vises i X++-koden (avhengig av hvordan databasen bestemmer seg for å skanne tabellene). | Hvis du vil ha mer informasjon, kan du se dokumentasjonen for det underliggende relasjonsdatabaseproduktet. |
| retry | Brukes i unntaksbehandling. | Unntaksbehandling med forsøk og fange opp nøkkelord |
| return | Returnerer fra en metode. | Deklarasjon av metoder |
| reverse | Poster returneres i omvendt rekkefølge. | Velg setningssyntaks |
| select | Setningsdelen select angir hvilke kolonner eller visninger som vises i resultatsettet. |
Select Statements |
| setting | Brukt sammen med kommandoen update_recordset . |
update_recordset |
| static | Statiske metoder kan ikke referere til instansvariabler (bare statiske variabler). Kall statiske metoder ved å bruke klassenavnet i stedet for på en instans av klassen ("MyClass.aStaticProcedure"). |
Method Modifiers |
| str | Angir string typen. |
Strings |
| sum | Returnerer summen av feltene fra radene som er angitt av setningsdelen group by i en select setning. |
Velg setningssyntaks |
| super | Kalles metoden som den nåværende metoden overstyrer. | Table Methods |
| switch | Switch statement. | Switch Statements |
| tableLock | Foreldet; tableLock er ikke lenger tilgjengelig. | |
| this | En referanse til den gjeldende forekomsten av klassen. Brukes i X++-kode i en forekomstmetode for klassen. Brukes til å referere til metodemedlemmer i klassen. | |
| throw | Brukes i unntaksbehandling. | Unntaksbehandling med forsøk og fange opp nøkkelord |
| true | Boolean literal. | Booleans |
| try | Brukes i unntaksbehandling. | Unntaksbehandling med forsøk og fange opp nøkkelord |
| ttsAbort | Ruller tilbake (kasserer) alle endringer i den nåværende transaksjonen. | Transaction Integrity |
| ttsBegin | Markerer begynnelsen på en transaksjon. | Transaction Integrity |
| ttsCommit | Markerer slutten på en transaksjon, og commiter endringene i tabellene. | Transaction Integrity |
| update_recordset | Tillater manipulering av radsett i én operasjon. | update_recordset |
| validTimeState | Filtrerer rader som en X++ SQL-setning select henter fra en gyldig tidstilstandstabell. For eksempel: select validTimeState(myDateEffective) * from xMyTable; ... eller... select validTimeState(myDateFrom, myDateTo) * from xMyTable; |
Effekter av gyldige tidstilstandstabeller på lese- og skriveoperasjoner |
| void | Identifiserer en metode som ikke returnerer en verdi. | Deklarasjon av metoder |
| where | En del av en select setning. Setningsdelen where angir betingelsene som skal tilfredsstilles. Det vil si radene du vil inkludere i resultatet. |
Velg setningssyntaks |
| while | Iteration statement. Utfører en setning gjentatte ganger så lenge testbetingelsen er sann. | Mens løkker mens du velger setninger |
| window | Lar deg endre størrelsen på utdatavinduet. Brukes med print setninger som ikke anbefales i produksjonskode. |
Print Statements |
Expressions syntax
Bruk et uttrykk i X++ for matematiske eller logiske operasjoner. Bygg uttrykk på datatypene til språket. Et uttrykk returnerer alltid en verdi av en eller annen type. Bruk denne verdien i beregninger, tildelinger, betingede setninger og lignende.
EBNF-beskrivelse av uttrykk i X++
| Term | Definition | |
|---|---|---|
| Expression | = | Enkeltuttrykk [RelationalOperator Simple-expression ] |
| RelationalOperator | = | = |
| Simple-expression | = | Enkelt uttrykk [ + |
| Term | = | Compfactor { Mult-operator CompFactor } |
| Mult-operator | = | * |
| CompFactor | = | [ ! ] [ - |
| Factor | = | Literal |
| Enum | = | EnumName :: Litteral |
| Variable | = | Identifikator [ [ Uttrykk ] ] [ . Expression ] |
| FunctionCall | = | [ Uttrykk (. |
| If-expression | = | Expression ? Uttrykk : Uttrykk |
Semantiske restriksjoner gjelder for den foregående syntaksen. Du kan ikke kalle noen metode ved å bruke operatoren :: . På samme måte kan du ikke bruke dette nøkkelordet uten et aktivt objekt. Det objektet må være innenfor en instansmetode og så videre.
Examples
| Eksempel på uttrykk | Description |
|---|---|
1 |
En heltallslitteral. |
| NoYes::No | An enum-reference. |
A |
A variable-reference. |
| Debtor::Find("1") | Et statisk metodekall (returnerer en kundevariabel). |
| (En > 3 ? sant : falsk) | Et hvis-uttrykk som returnerer sann eller usann. |
| (velg CustTable der CustTable.Account == "100"). NameRef | A select-expression. Returnerer nameref-feltet i kundetabellen. Dette er en streng. |
| A >= B | Et logisk uttrykk. Returnerer sann eller usann. |
| A + B | Et aritmetisk uttrykk. Summerer A og B. |
| A + B / C | Beregner B/C, og legger deretter til dette i A. |
| ~A + dette. Value() | Summerer binærtallet ikke A, og resultatet av metodekallet Verdi på objektet i omfang (dette). |
| Debtor::Find("1").NameRef | Returnerer NameRef-feltet for den funnet kundeposten. |
| Debtor::Find("1").Balance() | Et metodekall i Balance kundetabellen (Debitor::Søk returnerer en kunde). Returnerer saldoen for kunden med kontonummer 1. |
EBNF overview
Utvidet Backus Naur-form (EBNF) er et metaspråk. Denne guiden bruker det til å beskrive språkets syntaks. En EBNF-definisjon består av produksjonsregler, ikke-terminaler og terminaler. Tabellen nedenfor viser nøkkelbegrepene.
| Key terms | Example | Description |
|---|---|---|
| Terminals | Work_Team | En terminal er ett tegn eller en streng med tegn som aldri endres. |
| Nonterminals | Employee |
En nonterminal er en beskrivelse av en del av en gyldig setning på språket som er definert enten av en produksjonsregel eller en tekstbeskrivelse. Et ikke-terminalsymbol kan alltid utvides til ett eller flere terminalsymboler. |
| Production rules | Ansatt = Utvikler | Tester |
Example
Work_Team = Leder ansatt {, Ansatt} Ansatt = Utvikler | Tester Dette eksemplet definerer en Work_Team som består av en Manager og én eller flere Employees. En Employee er definert som en Developer, eller en Tester. Symbolene som brukes i eksemplet, er beskrevet i tabellen nedenfor.
Spesielle symboler i EBNF
| Symbol | Description |
|---|---|
| (Expression) | Parenteser holder symbolene (terminaler og ikke-terminaler) sammen. De kan plasseres hvor som helst på høyre side av en produksjonsregel. |
| Expression1 | Expression2 |
| [Expression] | Valgfritt: Elementene mellom [ og ] er valgfrie. Alle eller ingen av elementene i hakeparentesene er inkludert. |
| {Expression} | Gjenta: Elementene mellom { og } er valgfrie, men kan gjentas så mange ganger som nødvendig. |
Hvis for eksempel tilbehøret du kjøper til sykkelen består av en sal, vannflaskeholdere, bjeller og horn, og du kan ha enten en klokke eller et horn, og null, en eller flere vannflaskeholdere og nøyaktig én sal, kan dette uttrykkes som: Bicycle_Accessories = sal [bell | horn] {water_bottle_holders} Denne grammatikken definerer følgende muligheter: saddlesaddle bellsaddle horn sal water_bottle_holder salklokke water_bottle_holder sadelklokke water_bottle_holder water_bottle_holder og så videre.
X++ Grammar
Denne artikkelen viser den formelle grammatikken for X++-språket.
Slik tolker du den formelle BNF-grammatikken
Denne delen beskriver grammatikken til X++ i Backus Naur Form (BNF). Et lite eksempel på BNF er beskrevet her.
AA ::= BB CC_SYM
BB ::= JJ_SYM
::= KK_SYM
AA er navnet på en produksjonsregel. En AA krever en BB, etterfulgt av en CC_SYM. A BB er også en produksjonsregel.
BB Derfor er ikke en terminal.
BB må være enten en JJ_SYM eller en KK_SYM. Både JJ_SYM og KK_SYM er terminaler fordi de ikke er navnene på andre produksjonsregler. CC_SYM er også en terminal.
I BNF for X++ grammatikk har de fleste terminalene _SYM som suffikset av navnet.
Formell X++ grammatikk i BNF
Denne delen inneholder BNF som definerer grammatikken til 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
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