부록  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개 *)

〈표현식〉은 연산을 포함한 식이거나 〈기본 표현식〉(정수 리터럴·변수·상수·괄호로 묶인 〈표현식〉) 그 자체일 수 있습니다. 각 연산의 피연산자는 특수한 경우를 제외하고는 모두 〈표현식〉입니다. 대입·복합 대입 연산자의 왼쪽 피연산자와 증감 연산자의 피연산자는 〈변수〉여야 합니다.