LR파싱 프로그램 구현
- 최초 등록일
- 2007.02.23
- 최종 저작일
- 2007.01
- 10페이지/
한컴오피스
- 가격 1,500원
![할인쿠폰받기](/images/v4/document/ico_det_coupon.gif)
소개글
일반 생활에서 사용되어 지는 산술식(+,-,*,/)의 계산을 수업시간에 배웠던 구문분석기(Lexical Analyzer)를 통하여 분석한 후 각각의 문법에서 action table과 goto table을 구하여 parsing table을 구성하고, LR 파서를 통하여 파싱하는 프로그램을 구현하였다.
컴파일 실행환경
Microsoft visual studio, window xp
본문내용
2. 프로그램 소스
// LR 파싱 프로그램
// Programming of LR parser
//
// Grammar :
// S -> E (0)
// E -> E + T (1) E -> E - T (2) E -> T (3)
// T -> T * F (4) T -> T / F (5) T -> F (6)
// F -> ( E ) (7) F -> num (8)
//
// parsing table 의 구성
// 각 cell : - 글자 ( s/r/a/e 이 들어 감)
// - 번호 ( state / rule_number )
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX_ST 16 // number of states
#define MAX_NTER 4 // number of nonterminals
#define Max_ter 8 // 여기는 terminal 의 총수 + 1 ( $까지 포함하여)
typedef char oneword[50]; // keyword 테이블
// symbol 테이블
typedef struct sssym{
oneword idstr;
int id_type;
}sym_ent; // 심볼테이블의 한 엔트리의 구조.
sym_ent symtbl [10]=
{ {"NUM",0}, {"+",1}, {"-",2}, {"*",3}, {"/",4}, {"(",5}, {")",6}, {"$",7}
};
int symtbl_end=10; // 심볼테이블에서 다음에 넣을 엔트리 번호
int done = 0; // 입력화일이 eof 에 도달하면 즉시 1로 바꿈. 더 이상 lexan 을 call 안 함.
참고 자료
없음