ANTLR 란 

구문 분석을 위해 LL(*) 문법을 사용하는 Parser generator 이다.  (Parser 가 아님에 주의, Parser 생성 도구)

ANTLR 를 통해 문법을 Java로 파싱, 렉싱을 한다.

/* Lexer - 어휘 분석을 한다. 분석하고자 하는 텍스트에서 의미가 있는 단어를 찾으면 token으로 만들어 주는 역할 */

/* Parser - 토큰화된 데이터를 가지고 구조적으로 나타내는 역할 */

 

 

 

 

ANTLR?(AnotherToolForLanguageRecognition)

– 구문 분석 (Syntax Analysis)을 위해 LL(*) 문법을 사용하는 Parser Generator (Parser 가 아님에 주의, Parser 생성 도구)

 

 

LL 파서(LL parser)는 문맥 자유문법의 일부를 파싱할 수 있는 하향식 파서이다. LL 파서는 입력 문자열의 왼쪽(Left)에서부터 파싱을 시작하여, 좌측유도(Leftmost derivation) 방식으로 동작한다. LL 파서로 파싱이 가능한 문법은 LL 문법이라고 부른다.

만약 LL 파서가 lookahead에 최대 k개의 토큰(token)을 사용한다면, 그 파서는 LL(k) 파서라고 부른다. LL(k) 파서로 파싱이 가능한 문법은 LL(k) 문법이라고 부른다.

 

 

 

 

우리가 사용하는 인텔리제이에서 이 ANTLR 를 설치할 수 있다.

File-> Setting->Plugin 으로 들어가서 ANTLR 를 검색해서 설치할 수 있다.

 

 

 

그 후 프로젝트를 생성한 후

src 폴더 및에 .g4파일을 생성하면 (Grammar 파일)을 생성할 수 있다.

토큰은 대문자로 시작해야 하고 파서는 소문자로 시작해야 한다. 여기서는 

INT, ID, NEWLINE, WS 가 토큰이되고, 파서는 prog, stat, expr, nullExpr, atom 같은 것을 말한다.

일단은 가볍게 눈에만 익혀보자.

 

만약 알파벳이 한개 이상 등장하면 ID 토큰/ 숫자가 1개이상 등장하면 INT 토큰 / 이스케이프문자  \r 은 존재할 수도 존재하지 않을 수도 있고 \n 개행되면 NEWLINE 이다.

 

해당 파일을 우클릭해서

Generate ANTLR 실행하면 input 에 대한 parse tree 를 확인할 수 있다.

인풋으로는 

2+3

x = 1 + 2 * 3 + (a) 를 작성하였다.

파스트리를 살펴보면, 

INT : 2 / (expr : +) / INT:3 / NEWLINE:\n / ID: x / /  INT: 1 / (expr: +) / INT : 2 / (multExpr: *)   / INT:3 / (expr:+) / (atom: '(') / ID:a / (atom: ')')

로 파싱한다는 것을 알 수 있다.

 

 

다음 실습에서 더 자세히 공부해보자

 

 

 

 

 

 

 

 

 

728x90

'컴파일러개론' 카테고리의 다른 글

[컴파일러개론 2] 구문분석  (0) 2023.09.12
[컴파일러개론 1] 어휘분석  (0) 2023.09.12

+ Recent posts