파서 제네레이터
스캐너를 생성하는 프로그램 – 스캐너 제네레이터(scanner generator)
파서를 생성하는 프로그램 – 파서 제네레이터(parser generator)
종류 |
문법의 취급 범위 |
속도 |
LR 파서 제네레이터 |
넓다 |
평균적 |
LALR 파서 제네레이터 |
비교적 넓다 |
평균적 |
LL 파서 제네레이터 |
약간 좁다 |
약간 빠르다 |
JavaCC 예제
options {
STATIC = false;
}
PARSER_BEGIN(Adder)
import java.io.*;
class Adder {
static public void main(String[] args) {
for (String arg : args) {
try {
System.out.println(evaluate(arg));
} catch (ParseException ex){
System.err.println(ex.getMessage());
}
}
}
static public long evaluate(String src) throws ParseException {
Reader reader = new StringReader(src);
return new Adder(reader).expr();
}
}
PARSER_END(Adder)
SKIP: { <[" ","\t","\r","\n"]>}
TOKEN: {
<INTEGER: (["0"-"9"])+>
}
long expr():
{
Token x, y;
}
{
x=<INTEGER> "+" y=<INTEGER> <EOF>
{
return Long.parseLong(x.image) + Long.parseLong(y.image);
}
}
Comment
더보기
options {
JavaCC 옵션
}
PARSER_BEGIN(파서클래스명)
package 패키지명;
import 라이브러리명;
public class 파서클래스명 {
Java 코드
}
PARSER_END(파서클래스명)
스캐너 작성
파서 작성
파서 클래스를 실행 시키기 위한 2단계
파서클래스의 인스턴스 작성
작성한 인스턴스에 대해 파싱하고 싶은 구문과
동일한 이름의 메서드 호출
{
Reader reader = new StringReader(src);
return new Adder(reader).expr();
}
JavaCC에는 4종류의 생성자가 존재.
Paser(InputStream s)
Parser(InputStream s, String encoding)
Parser(Reader r)
Parser(XXXXTokenManager tm)
'잡동사니 > 컴파일러' 카테고리의 다른 글
[컴파일러 구조와 원리] - TOKEN (0) | 2015.12.31 |
---|---|
[컴파일러 구조와 원리] - 어휘 해석 (0) | 2015.12.31 |
[컴파일러 구조와 원리] - 구문 해석( lexical analyze ) (0) | 2015.12.31 |
[컴파일러 구조와 원리] - 컴파일의 4단계 (0) | 2015.12.31 |
[컴파일러 구조와 원리] - 컴파일의 과정 (0) | 2015.12.31 |