다음을 통해 공유


X++ 구문

비고

커뮤니티 관심 그룹은 이제 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++ 클래스의 정적 메서드
  • X++ 클래스의 인스턴스 메서드
  • .NET Framework 클래스의 메서드
이벤트 용어 및 키워드 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 및 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 문 구문
print 화면에 출력을 표시할 수 있습니다. 프로덕션 코드에서는 이 문을 사용하면 안 됩니다. 인쇄 문
프라이빗 메서드 액세스 한정자입니다. 메서드는 메서드를 선언하는 클래스 내에서만 사용할 수 있습니다. 메서드 액세스 제어
보호된 메서드 액세스 한정자입니다. 메서드를 선언하는 클래스의 메서드 및 파생 클래스에서 메서드를 사용할 수 있습니다. 메서드 액세스 제어
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 는 프로덕션 규칙의 이름입니다. 다음에 AABBCC_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

추가 리소스

X++ 언어 참조