실제로 구현하기 위해
각 논터미널에 대한 FIRST 집합들을 전역변수로 할당하고
값을 구하게 된다.
first_sets 2차원 배열을 보면
논터미널의 개수 만큼 , 터미널 집합들이 배정된다.
실제로 이 상수의 크기는
pgyacc.h 에 정의 되어 있는데
#define RULE_SIZE 32
#define RULE_NUM 1024
#define RULE_SET_SIZE (RULE_SIZE/32)
#define TER_NUM 1024
#define NON_NUM 1024
#define TER_SET_SIZE (TER_NUM/32)
#define LR_NUM 4096
#define LR_SET_SIZE (LR_NUM/32)
#define EPSILON 0
#define DOLLOR (TER_NUM - 1)
#define ACCEPT 1025
#define SH_RE_CONF 1026
#define RE_RE_CONF 1027
크기 제약을 둔것이다.
하지만 상당히 크기가 큰데
실제 문법은 크기가 다양하고 저 값보다 작은 경우가 대부분이고
굳이 최대 크기까지 계산할 필요는 없으므로
실제 문법의 크기는 파싱과정에서 알아낸다.
rule_row // 룰의 개수
st_ter // 터미널 심볼의 개수
st_non // 논터미널 심볼의 개수
앞서 설명한 알고리즘에 따라
2개의 스텝 과정을 거쳐서 FIRST 집합을 구하게 된다.
실제로 2칙(?) 연산 문법을 작성하고
FIRST를 구해보면 작 작동하는 것을 볼 수 있다.
'프로젝트 > 어설픈 야크 ,2010' 카테고리의 다른 글
5. 어설픈 야크 만들기 (2) CLOSURE 와 GOTO 연산 (0) | 2011.01.14 |
---|---|
5. 어설픈 야크 만들기 (1) LR(0) (0) | 2011.01.12 |
4. 어설픈 야크 만들기 (4) FIRST 구현 (0) | 2011.01.12 |
4. 어설픈 야크 만들기 (3) 집합 관련 표현 (0) | 2011.01.12 |
4. 어설픈 야크 만들기 (2) FIRST 구하기 개념 (1) | 2011.01.12 |
4. 어설픈 야크 만들기 (1) FIRST 구하기 필요성 (0) | 2011.01.12 |
댓글을 달아 주세요