2011. 9. 22. 04:59
무제 part1
2011. 9. 22. 04:59 in 컴파일러 & 운영체제
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
안녕하세요.
Geeks_Company입니다.
현재 컴파일러의 일부 기능을 활용 소스 생성 관련 어플리케이션을 제작하는 중인데,
그 가운데 사용될 부분에 관해서 짧게 나마 캡쳐를 해서 설명을 드릴까 해서 적어 둡니다.
흔히 컴파일러에서 문법을 만들때 많이 사용 되는 것중 하나가 정규식입니다.
구체적인 정규식 언급은 하지 않겠습니다.
이해가 필요 하신분은 http://en.wikipedia.org/wiki/Regular_expression 이 곳을 참조 하시기 바랍니다.
======================================================
다시 본론으로 들어가서,
최소 1번 과 생략 가능한 상황을 설명 드리겠습니다.
ex)
genfun int , int ;
genfun int ;
위의 경우 문법으로 표현 하면, command (type (comma|EOL))+ 로 표현이 가능합니다.
여기서 "+" 의 경우 , 최소 1번은 반복된다는 의미 이며,
여기서 "*" 의 경우 , 생략 가능하거나 , 무한대로 반복 가능하다는 의미 입니다.
EOL은 end of line 으로 이곳에서는 ";"을 뜻합니다.
즉
(type (comma|EOL))+ 는
int; - 수렴
int, - 수렴
int,int; - 수렴
위의 경우를 의사 코드로 진행 하면 이러 합니다.
-> start
while(true)
getCommand() ? 다음 진행 : error
while(true)
getType() ? 다음 진행 : error
getCommaOrEOL() ?
->EOL 탈출
->Comma 진행
: error
먼저 genfun int ; 를 입력 할 경우 결과값입니다.
genfun int ' 를 입력 할 경우 결과값입니다. type 이후 comma or EOL 만 수렴 합니다.
genfun int , int 를 입력 할 경우 결과값입니다. 이부분은 아직 에러 핸들링 부분인데 미구현 입니다.
genfun int , int ; 를 입력 할 경우 결과값입니다. type을 다 받아와서 읽어 옵니다.
현재 string 과 int 을 여러게 입력 후 처리한 모습입니다.
이제 위에 적힌 간단한 문법을 토대로 소스를 생성하는 프로그램을 만들어서 다음편에서 소개 시켜 드리겠습니다.
'컴파일러 & 운영체제' 카테고리의 다른 글
파서 만들때 유념 할 사항. (0) | 2011.10.25 |
---|---|
Dangling else 문제점. (0) | 2011.09.27 |
재귀 함수 활용 변수 선언문 처리 1. (0) | 2011.09.26 |
Parser에서 재귀 함수의 역할 (0) | 2011.09.21 |
소스 제너레이터 관련. (2) | 2011.09.20 |