복잡프로그래밍2010. 12. 16. 18:03


strong LL(1) 의 형태의 문법으로 작성하면

이를 순환 프로시져로 자동 작성해 주는 프로그램 이다.

context free 문법과 같이 문법을 작성하기 위해서는

NONTERMINAL  -> TERMINAL or NONTERMINAL;

하나의 NONTERMINAL에 여러개의 생성규칙을 달고 싶으면 정규식과 비슷하게

union mark '|' 을 붙여서 구분해준다. 그리고  하나의 생성규칙이 끝나면 end mark ';' 를 붙여줘야 한다.

예제는 다음과 같다.



위 와 같이 입력하고  gramfile.txt 라는 이름으로 저장해야 한다. 같은 폴더내 들어있으면 된다.

라인단위 주석도 붙일 수 있다. 생성규칙은 항상 Nonterminal 로 시작하며 영문자 대소문자 + 언더바, 이면 된다.

'->'  이후 몸통이 온다. 몸통 안에는 terminal 또는 nonterminal이 올 수 있는데 

terminal의 경우 ' 문자로 둘러싸주고 안에는 영문자 대소문자 + 언더바 만 가능하다.

예제를 잘 보면 여러개의 생성규칙을 가질 경우 ('|' 으로 구분되는 놈)

몸통의 제일 앞대가리는 항상 TERMINAL 이다.

왜냐하면 한개의 심볼을 미리 읽었을 때 이것이 어떤 생성규칙을 선택할지 꼭 결정해야 하기 때문이다. 
(중복체크는 하지 않으니 문법을 잘 잘성해야 함)

strong LL(1) grammar 형식으로 작성되기만 하면 된다.


출력 파일은 sl2pout.c 파일로 만들어지며 위 예제의 출력 결과는 다음과 같다.




'복잡프로그래밍' 카테고리의 다른 글

pglexer 코드  (0) 2011.09.02
sl2p 프로그램 소스  (0) 2010.12.16
sl2p 프로그램  (0) 2010.12.16
pg_lex 프로그램  (0) 2010.10.27
pglex 사용예제  (0) 2010.10.09
pglex 소스  (0) 2010.10.09
Posted by 멍충한아싸

댓글을 달아 주세요