티스토리 뷰
레몬 컴파일러 (LALR(1) parser generator)
http://www.hwaci.com/sw/lemon/
기본적인 문법(input file 의 syntax)
http://www.hwaci.com/sw/lemon/lemon.html >> Input File Syntax
tutorial
http://www.webdotdev.com/nvd/content/view/344/
1번에서 사용했던 example1.y 에 조금씩 변형을 가해 보자.
처음에 우리는 token type 을 int 로 사용했다. 근데 이것을 struct 로 수정해보자.
int type 을 Token type 으로 수정하게 되면서, 그에 맞게 grammar 에 적혀있는
C code 도 수정을 가해야 한다. 거기에 더해 main 도 같이 수정해야 한다.(http://souptonuts.sourceforge.net/code/main_part3.html)
그리고 아무래도 Parse(0, 0, 0) 처럼 '0' 을 이용해서 endofinput 을 정의하는 것이 이상하다.
그래서 NEWLINE 을 이용하도록 수정해 보자.
아래처럼 grammar 를 수정해서 NEWLINE 을 추가하고,
NEWLINE 에 대한 정의를 해 놓지 않으면 된다.
main ::= in.
in ::= .
in ::= in program NEWLINE.
Parse (pParser, NEWLINE, t1);
그러면 예전에는 0 일때 destruction() 을 타게 되어 있지만,
이제는 NEWLINE 일때, 즉, Parse(pParser, NEWLINE, t1); 에서 destruction() 을 타게 된다.
이제 parser 를 만들었다. 이 parser 를 실제로 사용하는 예제는 아래를 참고하면 될 듯 하다.
http://www.webdotdev.com/nvd/content/view/344/99999999/1/4/
example1.y
-----
%token_type {Token} %type expr {Token} %left PLUS MINUS. %left DIVIDE TIMES. %include { #include <assert.h> #include <iostream> #include "example1.h" struct Token { const char *z; int value; unsigned n; };
void token_destructor(Token t) { std::cout << "In token_destructor t.value= " << t.value << std::endl; std::cout << "In token_destructor t.n= " << t.n << std::endl; } } /* end of %include */ %token_destructor { token_destructor($$); }
main ::= in. in ::= . in ::= in program NEWLINE. program ::= expr(A). { std::cout << "Result=" << A << std::endl; } expr(A) ::= expr(B) MINUS expr(C). { A.value = B.value -C.value; } expr(A) ::= expr(B) PLUS expr(C). { A.value = B.value +C.value; } expr(A) ::= expr(B) TIMES expr(C). { A.value = B.value *C.value; } expr(A) ::= expr(B) DIVIDE expr(C). { if(C.value != 0){ A.value = B.value / C.value; }else{ std::cout << "divide by zero" << std::endl; } } /* end of DIVIDE */ expr(A) ::= NUM(B). {A.value =B.value ;}
- Total
- Today
- Yesterday
- sudachi
- 편집프로그램
- 데크에 바인딩묶기
- 미스터피자주문
- 칠오름농장
- 영귤
- 보드고글
- 인공눈
- 영귤차
- 대일농장
- 과학
- icon tool
- 제주영귤
- icon program
- 제주녹색농원
- 그림편집
- 녹색농원
- 인공안구
- 명언
- 의학
- 칠오름
- 늙기
- network error
- 고강도
- 무릎마사지
- 샤워기전
- breakpoint
- 스타치
- 인테리어
- 상식
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |