부록 BNF 문법
아래는 표현식의 문법을 BNF(Backus-Naur Form)로 기술한 것입니다. 토큰 사이의 공백은 무시되지만, 리터럴·상수 토큰의 내부에는 공백이 올 수 없습니다. { ... }는 0회 이상의 반복, [ ... ]는 0회 또는 1회의 출현을 나타냅니다.
〈표현식〉 ::= 〈기본 표현식〉
| 〈쉼표 연산〉
| 〈대입 연산〉
| 〈조건 연산〉
| 〈논리 연산〉
| 〈비트 연산〉
| 〈상등 연산〉
| 〈비교 연산〉
| 〈비트 이동 연산〉
| 〈산술 연산〉
| 〈전위 증감〉
| 〈후위 증감〉
| 〈단항 연산〉
〈기본 표현식〉 ::= 〈정수 리터럴〉
| 〈변수〉
| 〈상수〉
| '(' 〈표현식〉 ')'
〈쉼표 연산〉 ::= 〈표현식〉 ',' 〈표현식〉
〈대입 연산〉 ::= 〈변수〉 ('=' | '+=' | '-=' | '*=' | '/=' | '%='
| '&=' | '^=' | '|=' | '<<=' | '>>=') 〈표현식〉
〈조건 연산〉 ::= 〈표현식〉 '?' 〈표현식〉 ':' 〈표현식〉
〈논리 연산〉 ::= 〈표현식〉 ('&&' | '||') 〈표현식〉
〈비트 연산〉 ::= 〈표현식〉 ('&' | '|' | '^') 〈표현식〉
〈상등 연산〉 ::= 〈표현식〉 ('==' | '!=') 〈표현식〉
〈비교 연산〉 ::= 〈표현식〉 ('<' | '<=' | '>=' | '>') 〈표현식〉
〈비트 이동 연산〉 ::= 〈표현식〉 ('<<' | '>>') 〈표현식〉
〈산술 연산〉 ::= 〈표현식〉 ('+' | '-' | '*' | '/' | '%') 〈표현식〉
〈전위 증감〉 ::= ('++' | '--') 〈변수〉
〈후위 증감〉 ::= 〈변수〉 ('++' | '--')
〈단항 연산〉 ::= ('~' | '!' | '+' | '-') 〈표현식〉
〈정수 리터럴〉 ::= 〈10진 리터럴〉 | 〈16진 리터럴〉 | 〈문자 리터럴〉
〈10진 리터럴〉 ::= 〈숫자〉 { 〈숫자〉 }
〈16진 리터럴〉 ::= '0x' 〈16진 숫자〉 { 〈16진 숫자〉 }
〈문자 리터럴〉 ::= ''' 〈문자〉 '''
| ''' '''
〈변수〉 ::= 〈로마자〉
〈상수〉 ::= 〈상수 문자〉 〈상수 문자〉 [ 〈상수 문자〉 [ 〈상수 문자〉 [ 〈상수 문자〉 ] ] ]
〈상수 문자〉 ::= 〈로마자〉 | '_'
〈숫자〉 ::= '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
〈16진 숫자〉 ::= 〈숫자〉 | 'A' | 'B' | 'C' | 'D' | 'E' | 'F'
| 'a' | 'b' | 'c' | 'd' | 'e' | 'f'
〈로마자〉 ::= 'A' | 'B' | ... | 'Z' | 'a' | 'b' | ... | 'z'
〈문자〉 ::= (* 작은따옴표 '를 제외한 유니코드 문자 1개 *)〈표현식〉은 연산을 포함한 식이거나 〈기본 표현식〉(정수 리터럴·변수·상수·괄호로 묶인 〈표현식〉) 그 자체일 수 있습니다. 각 연산의 피연산자는 특수한 경우를 제외하고는 모두 〈표현식〉입니다. 대입·복합 대입 연산자의 왼쪽 피연산자와 증감 연산자의 피연산자는 〈변수〉여야 합니다.