비고
커뮤니티 관심 그룹은 이제 Yammer에서 Microsoft Viva Engage로 이동했습니다. Viva Engage 커뮤니티에 가입하고 최신 토론에 참여하려면 Finance and Operations Viva Engage Community 양식에 대한 요청 액세스 권한을 작성하고 참여하려는 커뮤니티를 선택합니다.
이 문서에는 X++에 대한 구문 참조가 포함되어 있습니다.
X++ 키워드
다음 표에 표시된 X++ 키워드는 예약되어 있습니다. 이러한 키워드는 다른 용도로 사용할 수 없습니다.
| 예약어 | Description | 관련 정보 |
|---|---|---|
| ! | 안. | 관계형 연산자 |
| != | 같지 않음 연산자(같지 않음)입니다. | 관계형 연산자 |
| # | 매크로 이름의 접두사입니다. | 방법: #define 및 #if 사용하여 매크로 테스트 |
| & | 이진 AND. | 산술 연산자 |
| && | 논리적 AND. | 관계형 연산자 |
| ( | 함수 호출의 시작을 나타내는 함수 호출 연산자입니다. | |
| ) | 함수 호출의 끝을 나타내는 함수 호출 연산자입니다. | |
| * | 곱하다. 별표(*)는 X++ SQL에서도 사용됩니다. 한 가지 용도는 문에 있는 테이블의 모든 필드를 나타내는 것입니다 select . 또 다른 사용은 연산자를 like 사용하여 모든 종류의 0~많은 문자를 나타내는 와일드카드로 사용됩니다. 연산자는 like? 문자도 사용합니다. |
산술 연산자 |
| ^ | 이진 XOR. | 산술 연산자 |
| | | 이진 OR. | 산술 연산자 |
| || | 논리적 OR입니다. | 관계형 연산자 |
| ~ | 안. | 산술 연산자 |
| + | 플러스. | 산술 연산자 |
| ++ | 증가. | 대입 연산자 |
| += | 추가 할당입니다. | 대입 연산자 |
| , | 쉼표 연산자입니다. 쉼표로 구분된 식은 순차적으로 왼쪽에서 오른쪽으로 계산됩니다. | |
| - | 마이너스. | 산술 연산자 |
| -- | 감소 연산자입니다. | 대입 연산자 |
| -= | 빼기 할당입니다. | 대입 연산자 |
| . | 예를 들어 formRun.run 클래스 멤버 액세스 연산자는 run 클래스 형식의 개체 메서드에 액세스합니다 FormRun. |
|
| / | 나누다. | 산술 연산자 |
| \ | 문자열에서 이스케이프합니다. 추가 따옴표와 탭의 '\t' 와 같은 특정 문자를 이스케이프합니다. | |
| @ | 키워드의 이스케이프입니다. 예를 들어 다음 var @str = 1@abstract; 문자열을 @ 식별자로 간주하는 문자 없이 컴파일하지 못합니다. 또한 \ 이스케이프 문자의 효과를 부정하고 소스 코드에서 둘 이상의 줄에 걸쳐 문자열을 사용하도록 설정하여 리터럴 문자열에 영향을 줍니다. 새 줄은 일반적으로 줄 피드라고 하는 16진수 0x0A 한 문자로 표시됩니다. 0x0D0A 16진수 0x0D 캐리지 리턴 문자는 포함되지 않습니다. | |
| : | 콜론(:) 문자는 문의 대/소문자 값을 구분하는 switch 데 사용됩니다. |
|
| :: | 정적(클래스) 메서드: ClassName::methodName()을 호출하고 NoYes::Yes와 같은 열거형 리터럴을 지정하는 데 사용됩니다. | |
| ; | 문을 종료합니다. 루프 또는 for 이니셜라이저, 업데이트 및 값 검사 부분의 구분 기호로 사용됩니다. |
|
| < | 미만. | 관계형 연산자 |
| << | 왼쪽 시프트. | 산술 연산자 |
| <= | 작거나 같음 | 산술 연산자 |
| = | 대입 연산자입니다. "="의 왼쪽에 있는 인수는 오른쪽에 있는 인수의 값으로 설정됩니다. | 대입 연산자 |
| == | 식이 같으면 true를 반환합니다. | 관계형 연산자 |
| > | 보다 큽다. | 관계형 연산자 |
| >= | 크거나 같음 | 관계형 연산자 |
| >> | 비트 오른쪽 시프트입니다. 이 연산자는 왼쪽의 비트를 오른쪽의 양만큼 이동합니다. 각 교대조는 숫자를 2^n으로 효과적으로 나눕니다. 여기서 n은 이동된 위치의 수입니다. | 산술 연산자 |
| ?: | 3항 연산자입니다. 물음표(?) 문자는 연산자가 like 어떤 종류의 문자 하나만 나타내는 데도 사용됩니다. 연산자 like 도 문자를 사용합니다. |
Ternary 연산자(?) |
| [ | 배열 선언자를 엽니다. "]"와 함께 사용해야 합니다. | |
| ] | 배열 선언자, 닫습니다. "["와 함께 사용해야 합니다. | |
| { | 0개 이상의 문을 포함할 수 있는 복합 문을 시작합니다. 복합 문은 가장 가까운 일치 "}"로 끝납니다. | |
| } | 위에서 설명한 복합 문의 끝을 나타냅니다. 이러한 문 중 첫 번째 문 앞에 "{"가 나타나야 합니다. | |
| abstract | 클래스 및 메서드 한정자입니다.
추상 클래스는 새 키워드를 사용하여 생성할 수 없습니다. 이 키워드에서 파생된 클래스만 생성할 수 있습니다.
추상 메서드는 호출할 수 없으며 재정의하는 메서드만 호출할 수 있습니다. 테이블은 AOT에서 해당 Abstract 속성을 Yes 로 설정하거나 클래스를 사용하여 추상으로 수정할 DictTable 수 있습니다.
Abstract 속성은 기본적으로 아니요로 설정되며 테이블을 다른 테이블로 확장하지 않으면 설정할 수 없습니다. 추상 테이블의 각 행에는 파생 테이블에 종속 행이 있어야 합니다. 즉, 추상 테이블의 각 행에 InstanceRelationType 속성 필드의 값이 0보다 큽니다. 테이블을 추상으로 표시하는 다른 효과는 없습니다. 비공식적으로 프로그래머는 구체적인 용어를 사용하여 비 추상적인 클래스를 설명하는 경우가 많습니다. |
메서드 한정자 테이블 상속 개요 |
| anytype | 모든 형식의 값을 포함할 수 있는 형식입니다. | Anytype |
| 만큼 | 파생 클래스 변수에 기본 클래스 변수를 할당할 때 필요합니다. 예를 들어 클래스를 Derived확장하는 클래스가 Base 지정된 경우 문 myDerived = myBase as Derived; 은 as 키워드를 사용하여 컴파일러 오류를 방지합니다. 이 키워드는 파생 테이블 변수에 기본 테이블 변수를 할당할 때도 적용됩니다. 값(myBase)이 지정된 형식(파생)이 아닌 경우 식은 null을 반환합니다. |
식 연산자: Is 및 As for 상속 |
| asc | 문의 or order절에 대한 옵션bygroup입니다by.select 정렬이 오름차순입니다. |
Select 문 구문 |
| at | 인쇄 창의 위치를 문의 일부로 print 지정합니다. 인쇄 문을 사용하면 안 됩니다. |
인쇄 문 |
| avg | 문의 절에 지정된 행의 필드 평균을 group byselect 반환합니다. |
Select 문 구문 |
| break | 반복 코드 블록에서 즉시 종료합니다. | Break 문 |
| 중단점 | 디버깅을 위해 설정된 중단점을 나타냅니다. 코드에서 중단점을 설정하려면 다음을 작성합니다. breakpoint; |
|
| 곁에 | 그룹화 및 주문 기준과 같은 예약된 용어의 일부입니다. | |
| byref | 호출된 메서드에 전달되는 매개 변수가 값 대신 참조(주소)로 전달되도록 지정합니다. Byref 는 참조로 매개 변수를 사용하는 .NET 메서드를 호출할 때 X++에서 사용됩니다(예: C# 키워드 out 또는 ref 사용). | 방법: CLR Interop에 byref 키워드를 사용합니다. |
| 경우 | 문 내의 선택 영역입니다 switch . |
Switch 문 |
| 잡기 | 예외 처리에 사용됩니다. | try 및 catch 키워드를 사용하여 예외 처리 |
| changeCompany | 데이터베이스 설정을 다른 회사로 변경합니다. | 회사 디자인 패턴 변경 |
| 클래스 | 클래스를 선언합니다. | X++의 클래스 |
| 클라이언트 | 메서드 한정자입니다. 이러한 한정자는 더 이상 사용되지 않습니다. 모든 메서드는 서버 계층에서 실행됩니다. | 메서드 한정자 |
| 컨테이너 | 형식을 container 지정합니다. 컨테이너에는 원자성 값 및 기타 컨테이너 시퀀스가 포함됩니다. |
Containers |
| continue | 루프의 다음 반복을 강제로 실행합니다. | Continue 문 |
| 개수 | 문의 절 group by 에 지정된 select 행의 레코드 수를 반환합니다. |
Select 문 구문 |
| crossCompany |
select 사용자가 읽을 수 있는 권한이 있는 모든 회사에 대한 데이터를 반환하도록 명령문이 발생합니다. |
회사 간 X++ 코드 기본 사항 |
| date | 형식 date의 변수를 지정합니다. |
날짜 |
| 기본값 | 문 내 switch 의 기본 사례입니다. 스위치 값이 문에 제공된 절과 일치하지 않는 경우 기본 파트의 case 코드 블록이 switch 실행됩니다. |
Switch 문 |
| delegate | 다른 클래스의 메서드에 대한 여러 참조를 저장하고 해당 메서드를 호출하라는 메시지가 표시되면 모든 메서드를 호출할 수 있는 클래스 멤버입니다. 대리자는 다음을 포함하여 다양한 종류의 메서드에 대한 참조를 저장할 수 있습니다.
|
이벤트 용어 및 키워드 X++, C# 비교: 이벤트 |
| delete_from | 데이터베이스에서 레코드를 삭제할 수 있습니다. | delete_from |
| desc | 문의 or order by 절에 대한 옵션 group by 입니다select. 정렬이 내림차순입니다. |
Select 문 구문 |
| 전시 | 메서드 한정자입니다.
표시</표시> 메서드는 폼 컨트롤에 계산된 값을 표시하는 데 사용됩니다. 일반 필드와 달리 이러한 값은 데이터베이스에 저장되지 않고 동적으로 계산됩니다. |
메서드 한정자 |
| div | 정수 나누기입니다. | 산술 연산자 |
| 하다 | 루프의 시작입니다 do...while . |
하다... while 루프 |
| 편집 | 메서드 한정자입니다.
edit X++의 메서드를 사용하면 사용자가 사용자 지정 논리를 실행하는 동안 양식 컨트롤의 값을 수정할 수 있습니다. 계산 값만 표시하는 메서드와 달리 display 편집 메서드를 사용하면 보기와 편집을 모두 수행할 수 있습니다.
|
메서드 한정자 |
| 그렇지 않으면 | 조건부 실행(if...else). |
if 및 if ... else 문 |
| eventHandler | 또는 연산자를 사용하여 += 대리자에서 메서드 참조를 추가하거나 -= 삭제할 때마다 사용해야 합니다. 예: myDelegate += eventHandler(OtherClass::myStaticMethod); | 이벤트 용어 및 키워드 X++, C# 비교: 이벤트 |
| 존재 | 문의 절과 join 함께 select 사용됩니다. |
Select 문 구문 |
| 확장 | 클래스 또는 인터페이스 선언 절입니다. 클래스가 다른 클래스를 명시적으로 확장하지 않는 경우 클래스는 "extends Object"를 작성한 것처럼 클래스를 확장하는 Object 것으로 간주됩니다. |
하위 클래스 만들기 |
| false | 부울 리터럴입니다. | 부울 |
| 결승전 | 클래스 및 메서드 한정자입니다. 이 메서드를 재정의할 수 없게 지정합니다. | 메서드 한정자 |
| firstFast | 문에서 select 첫 번째 행에 대한 인출 속도를 높이기 위해 사용됩니다. |
Select 문 구문 |
| firstOnly | 문에서 select 첫 번째 레코드만 가져오는 데 사용됩니다. 키워드는 firstOnly X++ SQL select 문에 의해 최대 하나의 레코드가 검색되도록 보장하지 않습니다. AOS에서 캐시를 EntireTable 사용하여 문의 select 데이터 요구를 firstOnly 충족할 수 있는 경우 키워드는 무시됩니다. |
문 구문 집합 기반 캐싱 선택 |
| firstOnly10 | firstOnly와 동일하며, 1개 대신 10개의 행을 반환합니다. | |
| firstOnly100 | firstOnly와 동일하며, 1개 대신 100개의 행을 반환합니다. | |
| firstOnly1000 | firstOnly와 동일하며, 1개 대신 1,000개의 행을 반환합니다. | |
| flush | 전체 테이블 캐시를 지웁니다. 이는 테이블에 대한 변경 내용이 후속 작업에 즉시 반영되도록 하려는 경우에 유용할 수 있습니다. | 설정 기반 캐싱 |
| for | 루프 반복의 경우 | For 루프 |
| forceLiterals | 문에서 select 최적화 시 절에 where 사용된 실제 값을 Microsoft SQL Server 데이터베이스에 표시하는 데 사용됩니다. |
Select 문 구문 |
| forceNestedLoop | SQL Server 데이터베이스가 중첩 루프 알고리즘을 사용하여 을 포함하는 join특정 SQL 문을 처리하도록 합니다. |
Select 문 구문 |
| forcePlaceholders | 최적화 시 절에 select 사용된 실제 값을 Microsoft SQL Server 데이터베이스에 where 표시하지 않도록 커널에 지시하기 위해 문에 사용됩니다. |
Select 문 구문 |
| forceSelectOrder | SQL Server 데이터베이스가 지정된 순서로 조인된 테이블에 액세스하도록 합니다. | Select 문 구문 |
| forUpdate | 업데이트 전용 레코드를 선택합니다. 페치되는 레코드에서 수행할 작업은 업데이트입니다. 기본 데이터베이스에 따라 레코드가 다른 사용자에 대해 잠겨 있을 수 있습니다. | Select 문 구문 |
| 보낸 사람 |
select 문의 일부입니다. 이 절은 from 열이 있는 테이블 버퍼를 지정합니다. |
Select 문 구문 |
| group | 문에 있는 group byselect 절의 일부입니다. |
Select 문 구문 |
| 만약 | 조건부 실행. | if 및 if ... else 문 |
| 구현 | 의 구현입니다 interface. |
인터페이스 개요 |
| insert_recordset | 하나 이상의 테이블의 데이터를 단일 서버 이동에서 하나의 결과 대상 테이블에 복사합니다. | insert_recordset |
| int | 형식 integer 의 변수(32비트)를 지정합니다. |
정수 |
| int64 | 형식 integer 의 변수(64비트)를 지정합니다. |
정수 |
| interface | 인터페이스 선언입니다. | 인터페이스 개요 |
| is | 클래스 변수에서 참조하는 개체가 지정된 클래스에서 상속되는지 또는 지정된 클래스인지를 묻습니다. 예를 들어 클래스를 Derived확장하는 클래스를 Base 지정하면 식 (myDerived is Base) 이 true를 반환합니다. 이 키워드는 클래스 상속 및 테이블 상속에 적용됩니다. |
식 연산자: Is 및 As for 상속 |
| 참여하다 | 테이블은 두 테이블에 공통된 열에 조인됩니다. 조인을 사용하여 여러 테이블을 기반으로 단일 결과 집합을 생성할 수 있습니다. | Select 문 구문 |
| 같이 | 와일드카드 기호 '*' 및 '?'을 사용하여 패턴별 일치를 테스트합니다. | 관계형 연산자 |
| maxof | 절에 지정된 행에서 필드의 최대값을 group by 반환합니다. |
Select 문 구문 |
| minof | 절에 지정된 행에서 필드의 최소값을 group by 반환합니다. |
Select 문 구문 |
| mod | 왼쪽 expression1의 정수 나머지를 오른쪽 식2로 나눈 값을 반환합니다. 비공식적으로 이를 모듈로 연산자라고도 합니다.
(12 mod 7) == 5 는 true입니다. |
|
| 신규 | 연산자. 클래스의 인스턴스를 만들거나 배열에 대한 메모리를 할당합니다. | |
| next | 테이블에서 다음 레코드를 가져오거나 명령 체인 시퀀스에서 다음 메서드를 호출합니다. | |
| noFetch | 지금 가져올 레코드가 없음을 나타냅니다. | Select 문 구문 |
| notExists | 문의 절과 join 함께 select 사용됩니다. |
Select 문 구문 |
| 없음 | 기호 상수입니다. | |
| optimisticLock | 테이블에 다른 값이 설정되어 있더라도 낙관적 동시성 제어를 사용하여 문을 실행하도록 합니다. | Select 문 구문 |
| 주문 | 문에 있는 order byselect 절의 일부입니다. |
Select 문 구문 |
| 외부 | 외부 조인입니다. | Select 문 구문 |
| pause | 작업의 실행을 중지합니다. 사용자에게 실행을 계속할지 여부를 지정하라는 메시지가 표시됩니다. 프로덕션 코드에서는 이 문을 사용하면 안 됩니다. | 문 선택 |
| pessimisticLock | 테이블에 다른 값이 설정되어 있더라도 비관적 동시성 제어를 사용하여 문을 실행하도록 합니다. | Select 문 구문 |
| 화면에 출력을 표시할 수 있습니다. 프로덕션 코드에서는 이 문을 사용하면 안 됩니다. | 인쇄 문 | |
| 프라이빗 | 메서드 액세스 한정자입니다. 메서드는 메서드를 선언하는 클래스 내에서만 사용할 수 있습니다. | 메서드 액세스 제어 |
| 보호된 | 메서드 액세스 한정자입니다. 메서드를 선언하는 클래스의 메서드 및 파생 클래스에서 메서드를 사용할 수 있습니다. | 메서드 액세스 제어 |
| public | 메서드 액세스 한정자입니다. 메서드는 모든 클래스에서 호출할 수 있습니다. | 메서드 액세스 제어 |
| 레알 |
real 반올림 오류 없이 10진수 형식인 형식을 지정합니다. |
Reals |
| repeatableRead | 현재 트랜잭션이 완료될 때까지 다른 트랜잭션이 현재 트랜잭션 내에서 논리로 읽은 데이터를 수정할 수 없게 지정합니다. 명시적 트랜잭션은 ttsAbort 또는 가장 바깥쪽 ttsCommit에서 완료됩니다. 독립 실행형 select 문의 경우 트랜잭션 기간은 select 명령의 기간입니다. 그러나 데이터베이스가 X++ 코드에 이 키워드가 나타나지 않더라도(데이터베이스가 테이블을 검사하기로 결정한 방식에 따라) 개별 select 문에서 repeatableRead와 동일한 값을 적용하는 경우가 있습니다. | 자세한 내용은 기본 관계형 데이터베이스 제품에 대한 설명서를 참조하세요. |
| 재시도 | 예외 처리에 사용됩니다. | try 및 catch 키워드를 사용하여 예외 처리 |
| 돌아오다 | 메서드에서 반환합니다. | 메서드 선언 |
| reverse | 레코드는 역순으로 반환됩니다. | Select 문 구문 |
| 고르다 | 이 절은 select 결과 집합에 표시되는 열 또는 뷰를 지정합니다. |
문 선택 |
| 서버 | 메서드 한정자입니다. 이 한정자는 무시되며 모든 메서드가 서버 쪽에서 실행되므로 사용하면 안 됩니다. | 메서드 한정자 |
| 설정 | update_recordset 명령과 함께 사용됩니다. | update_recordset |
| 정적 | 정적 메서드는 인스턴스 변수(정적 변수만)를 참조할 수 없습니다. 는 클래스 인스턴스(""MyClass.aStaticProcedure)가 아닌 클래스 이름을 사용하여 호출될 수 있습니다. |
메서드 한정자 |
| str | 형식을 string 지정합니다. |
현악기들 |
| 합계 | 문의 절에 지정된 group by 행에서 필드의 합계를 select 반환합니다. |
Select 문 구문 |
| 슈퍼 | 현재 메서드에서 재정의된 메서드를 호출합니다. | 테이블 메서드 |
| 스위치 | Switch 문입니다. | Switch 문 |
| tableLock | 되지 않는; tableLock 을 더 이상 사용할 수 없습니다. | |
| 이 | 클래스의 현재 인스턴스에 대한 참조입니다. 클래스의 인스턴스 메서드 내에서 X++ 코드에 사용됩니다. 클래스의 메서드 멤버를 참조하는 데 사용됩니다. | |
| 던지다 | 예외 처리에 사용됩니다. | try 및 catch 키워드를 사용하여 예외 처리 |
| 참 | 부울 리터럴입니다. | 부울 |
| 노력하다 | 예외 처리에 사용됩니다. | try 및 catch 키워드를 사용하여 예외 처리 |
| ttsAbort | 현재 트랜잭션의 모든 변경 내용을 롤백(즉, 취소)합니다. | 트랜잭션 무결성 |
| ttsBegin | 트랜잭션의 시작을 표시합니다. | 트랜잭션 무결성 |
| ttsCommit | 트랜잭션의 끝을 표시하고 테이블에 변경 내용을 커밋합니다. | 트랜잭션 무결성 |
| update_recordset | 한 작업 내에서 행 집합을 조작할 수 있습니다. | update_recordset |
| validTimeState | X++ SQL select 문으로 유효한 시간 상태 테이블에서 검색된 행을 필터링합니다. 예를 들어 xMyTable에서 validTimeState(myDateEffective) * 를 선택합니다. ... 또는... xMyTable에서 validTimeState(myDateFrom, myDateTo) * 를 선택합니다. |
읽기 및 쓰기 작업에 유효한 시간 상태 테이블의 효과 |
| 비우다 | 값을 반환하지 않는 메서드를 식별합니다. | 메서드 선언 |
| where |
select 문의 일부입니다. 이 절은 where 충족할 조건, 즉 결과에 포함할 행을 지정합니다. |
Select 문 구문 |
| 동안 | 반복 문입니다. 테스트 조건이 true인 경우 문을 반복적으로 실행합니다. | 문을 선택하는 동안 반복하는 동안 |
| 창 | 출력 창의 크기를 변경할 수 있습니다. 프로덕션 코드에서 권장되지 않는 인쇄/인쇄< 문과 함께 >사용됩니다. |
인쇄 문 |
식 구문
X++의 식은 수학 또는 논리적 방식으로 사용됩니다. 식은 언어의 데이터 형식을 기반으로 합니다. 즉, 식은 항상 일부 형식의 값을 반환합니다. 이 값은 계산, 할당, 조건문 등에 사용할 수 있습니다.
X++의 식에 대한 EBNF 설명
| 용어 | Definition | |
|---|---|---|
| Expression | = | Simple-expression [RelationalOperator Simple-expression] |
| RelationalOperator | = | = |
| 단순 식 | = | Simple-expression [ + |
| 용어 | = | Compfactor { Mult-operator CompFactor } |
| Mult 연산자 | = | * |
| CompFactor | = | [ ! ] [ - |
| 요인 | = | Literal |
| Enum | = | EnumName :: 리터럴 |
| 변수 | = | Identifier [ [ Expression ] ] [ . 식 ] |
| FunctionCall | = | [ 식(. |
| If 식 | = | 식? 식: 식 |
의미 체계 제한은 이전 구문에 적용됩니다. :: 연산자를 사용하여 메서드를 호출할 수 없습니다. 마찬가지로 활성 개체가 없으면 이 키워드를 사용할 수 없습니다. 즉, 인스턴스 메서드 내에 있지 않은 경우입니다.
예시
| 식의 예 | Description |
|---|---|
1 |
정수 리터럴입니다. |
| NoYes::No | 열거형 참조입니다. |
A |
변수 참조입니다. |
| 채무자::Find("1") | 정적 메서드 호출(고객 변수 반환)입니다. |
| (A > 3 ? true : false) | true 또는 false를 반환하는 if 식입니다. |
| (CustTable.Account == "100"인 CustTable을 선택합니다.) NameRef | select 식입니다. 고객 테이블의 nameref 필드를 반환합니다. 문자열입니다. |
| A >= B | 논리 식입니다. true 또는 false를 반환합니다. |
| A + B | 산술 식입니다. 합계 A 및 B입니다. |
| A + B / C | B/C를 계산한 다음 A에 추가합니다. |
| ~A + 이것. Value() | A가 아닌 이진과 범위의 개체에 대한 메서드 호출 값의 결과를 합산합니다(이 값). |
| 채무자::Find("1"). NameRef | 찾은 고객 레코드의 NameRef 필드를 반환합니다. |
| 채무자::Find("1"). Balance() | 고객 테이블에서 메서드 호출 Balance (Debtor::Find는 고객을 반환합니다). 계정 번호가 1인 고객의 잔액을 반환합니다. |
EBNF 개요
EBNF(Extended Backus Naur Form)는 metalanguage이며 이 가이드에서 언어 구문을 설명하는 데 사용됩니다. EBNF 정의는 프로덕션 규칙, 비터미널 및 터미널로 구성됩니다. 키 용어는 다음 표에 나와 있습니다.
| 주요 용어 | Example | Description |
|---|---|---|
| 터미널 | Work_Team | 터미널은 변경되지 않는 한 문자 또는 문자 문자열입니다. |
| 비터미널 | Employee |
비터미널은 프로덕션 규칙 또는 텍스트 설명에 의해 정의된 언어로 유효한 문장의 일부에 대한 설명입니다. 비터미널 기호는 항상 하나 이상의 터미널 기호로 확장할 수 있습니다. |
| 프로덕션 규칙 | 직원 = 개발자 | Tester |
Example
Work_Team = 관리자 직원 {, Employee} 직원 = 개발자 | 테스터 이 예제에서는 Work_Team 하나 이상의 Manager구성 Employees 으로 정의합니다. An
EBNF의 특수 기호
| 기호 | Description |
|---|---|
| (식) | 괄호는 기호(터미널 및 비터미널)를 함께 포함합니다. 프로덕션 규칙의 오른쪽에 있는 모든 위치에 배치할 수 있습니다. |
| Expression1 | Expression2 |
| [식] | 선택 사항: [와] 사이의 항목은 선택 사항입니다. 대괄호 안에 있는 항목의 전부 또는 없음이 포함됩니다. |
| {Expression} | 반복: {와 } 사이의 항목은 선택 사항이지만 필요에 따라 여러 번 반복할 수 있습니다. |
예를 들어 자전거용으로 구매하는 액세서리가 안장, 물병 홀더, 종, 뿔로 구성되고 종이나 뿔, 0개, 1개 이상의 물병 홀더, 그리고 정확히 하나의 안장을 가질 수 있는 경우 다음과 같이 표현될 수 있습니다. Bicycle_Accessories = 안장 [종 | 혼] {water_bottle_holders} 이 문법은 다음과 같은 가능성을 정의합니다. saddlesaddle bellsaddle horn 안장 water_bottle_holder 안장 종 water_bottle_holder 안장 종 water_bottle_holder water_bottle_holder 등등.
X++ 문법
이 문서에서는 X++ 언어의 공식 문법을 보여줍니다.
공식 BNF 문법을 해석하는 방법
이 섹션에서는 BNF(Backus Naur Form)의 X++ 문법에 대해 설명합니다. BNF의 작은 예는 여기에 설명되어 있습니다.
AA ::= BB CC_SYM
BB ::= JJ_SYM
::= KK_SYM
AA 는 프로덕션 규칙의 이름입니다. 다음에 AA 는 BBCC_SYM 필요합니다. A BB 는 프로덕션 규칙이기도 합니다. 따라서 BB 터미널이 아닙니다.
BB 은 JJ_SYM 또는 KK_SYM 중 하나여야 합니다. JJ_SYM 및 KK_SYM 모두 다른 프로덕션 규칙의 이름이 아니기 때문에 터미널입니다. CC_SYM 터미널이기도 하다.
X++ 문법용 BNF에서 대부분의 터미널은 이름의 접미사로 _SYM.
BNF의 공식 X++ 문법
이 섹션에는 X++의 문법을 정의하는 BNF가 포함되어 있습니다.
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