세인드의 블로그

자연어부터 시작해서 컴퓨터 언어까지 모든 언어는 의사소통을 위한 규칙이 존재합니다. 자바스크립트 역시 다양한 어휘와 문장을 만드는 규칙이 존재합니다.


기본적으로 모든 언어는 문자를 조합하여 의미있는 단어를 만들고 단어를 조합하여 문장을 만듭니다. 자바스크립트와 같은 컴퓨터 언어도 마찬가지로 가장 저수준 문법인 어휘(Lexical)에 대한 구조를 먼저 정의하고 어휘를 이용해 표현식(Expression)과 연산자(Operator) 그리고 문장(Statement) 등을 정의하여 완벽한 프로그램을 만들 수 있습니다.


어휘 문법(Lexical Grammar)

어휘 문법은 많은 사람들이 간과하고 그냥 넘어가지만, 자바스크립트를 이루고있는 가장 기본적이고 작은 단위의 규칙입니다. 가장 기본적인 만큼 가장 중요한 부분이기도 합니다.


문자의 기본 구성

자바스크립트에서 문자는 유니코드로 표현합니다. 문자의 범위는 유니코드에서 지원하는 모든 기호이며 로마자 알파벳은 대소문자를 구분합니다. 대부분의 문자는 의미가 정의되어있지 않지만 일부 문자는 제어, 공백, 줄바꿈, 문장 종결, 식별 등 의미가 정해져있습니다.



토큰(Tokens)

자바스크립트 엔진이 인식하는 프로그램의 최소 단위이므로 더이상 쪼갤 수 없습니다. 토큰의 구성은 다음과 같습니다.




제어 문자(Control Characters)

눈에 보이지는 않지만 컴퓨터가 여러가지 제어를 목적으로 삽입되는 문자입니다.



공백 문자(White Space Characters)

공백을 표현하기 위한 문자입니다. 일반적으로 스페이스바를 쳐서 입력하는 공백문자는 유니코드 U+0020이며 탭을 의미하는 공백문자는 U+0009입니다. 자바스크립트 엔진은 토큰 사이에 있는 모든 공백문자는 무시하여 코드 실행에 영향을 주지 않습니다.



줄바꿈 문자(Line Terminator Characters)

줄과 줄을 구분시켜주는 문자입니다. 엔터를 칠 때 입력되는 유니코드 문자로 시스템에 따라 U+000AU+000D등이 있습니다. 줄바꿈 문자는 기본적으로 코드 실행에 영향을 주지 않지만, 자바스크립트의 세미콜론 삽입 규칙에 따라 의도치 않게 코드 실행에 영향을 줄 수도 있으니 주의해야합니다.



주석(Comments)

코드에 대한 추가 설명 혹은 코드의 실행을 막기 위해 사용하는 문자입니다. 한 줄 주석과 여러 줄 주석이 있습니다.

여러 줄 주석의 경우 중첩된 주석을 지원하지 않으므로 주의해야합니다. 당연히 코드의 실행에는 영향을 주지 않습니다.



IdentifierName

IdentifierName을 조합하여 식별자나 예약어를 정의할 수 있습니다.IdentifierName는 IdentifierStart와 IdentifierPart로 이루어져 있습니다. 보통 책에서 식별자를 선언할 때 영문으로 시작해야하며 숫자는 사용할 수 없다는 내용이 모두 IdentifierName에 정의되어 있습니다.

IdentifierStart는 시작 문자를 정의하며 UnicodeIDStart, $, _, \u를 포함합니다.

IdentifierPart는 시작 문자를 제외한 부분을 정의하며 UnicodeIDContinue, $, _, \u를 포함합니다.


*식별자(Identifier)는 예약어를 제외한 IdentifierName입니다.



예약어(Reserved Words)

언어차원에서 미리 등록하여 특별한 의미로 사용중인 단어들입니다. 따라서 식별자로는 사용이 불가능합니다. 대표적으로 if, for, var 등이 있습니다. 예약어는 흔히 키워드(Keyword)라고도 불리지만 예약어와 키워드는 미묘한 차이가 있습니다. 키워드는 당장 사용이 가능하지만 예약어는 당장 사용하지는 못하고 미래에 사용하기 위해 등록된 단어와 키워드 모두를 의미합니다.

예약어 = 키워드 + Future Reserved Words



문장 부호(Punctuator)

연산 등 특별한 의미를 갖고 있는 문자입니다. 문장 부호의 종류는 다음과 같습니다.



리터럴(Literals)

리터럴은 더 이상 분해할 수 없는 고정된 값을 의미합니다. 자바스크립트에서 리터럴의 종류는 다음과 같습니다.



자동 세미콜론 삽입 규칙(Automatic Semicolon Insertion, ASI)

자바스크립트에서 문장은 세미콜론(;)으로 종결되지만 개발자에게 세미콜론을 사용할 것을 강요하지는 않습니다. 문장을 종결할 때 세미콜론을 사용하지 않으면 자바스크립트는 규칙에 따라 자동으로 세미콜론을 삽입해주기때문에 예상치 못한 동작을 피하기 위해 개발자가 직접 세미콜론을 사용하여 문장을 종결시켜 주는 것이 좋습니다.