야크도 구문이 있다.

CFG (Context Free Grammar) 는 

lhs 에 논터미널이 오고

rhs 는 무제한인 문법이다.

야크는 이러한 작성된 구문을 인식해야 하므로 

텍스트로 된 구문 파일을 읽어들여서 이를 토큰으로 쪼개는 과정이 필요하다.


대략적인 구문의 모양새는 다음과 같다.

NON -> NON 'or' TER | TER 'or' UNION;

TER -> 'alphabet' | 'underline' ;


최대한 오토마타 수업이나 컴파일러 수업시에 표기하는 방식대로 할 것이다. 이를 위해 토큰을 나눠보면 다음과 같다.


대소문자 + 언더라인  : 논터미널

' (대소문자 + 언더라인) '  : 터미널  , 따옴표로 둘러싸인 대소문자

->  : 생성규칙

|  : 유니온

;  : 엔드마커


위 들 토큰을 가지고 pglex 를 작성하면 다음과 같다.


%%
//.*\n                       // skip
;                                return END;
\|                             return UNI;
->                              return PRO;
[a-zA-Z_]+                 return NON;
'[a-zA-Z_]+'               return TER;

(\s|\t|\n)+              // skip
%%


밑은 이렇게 하여 작성된 스캐너 소스이다.


Posted by 멍충한아싸

댓글을 달아 주세요