게시판 인덱스

 
 FAQFAQ   검색검색   멤버리스트멤버리스트   사용자 그룹사용자 그룹   사용자 등록하기사용자 등록하기 
 개인 정보개인 정보   비공개 메시지를 확인하려면 로그인하십시오비공개 메시지를 확인하려면 로그인하십시오   로그인로그인 

[참고] 테스트용 T(reasure) 파서

 
글 쓰기   답변 달기     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2014)
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
김용기



가입: 2014년 9월 30일
올린 글: 11

올리기올려짐: 2014년10월23일 10:33    주제: [참고] 테스트용 T(reasure) 파서 인용과 함께 답변

안녕하세요?

테스트용으로 만든 간단한 파서를 공개합니다.
tParser.mly 코드에서 모듈명만 고치셔서 쓰면 됩니다.
저의 경우 숙제 파일이 hw4_2.ml 이기 때문에
코드:
%type <Hw4_2.map> parse_map

이지만 파일명이 Hw4.ml이라면
코드:
%type <Hw4.map> parse_map

으로 바꿔주시면 됩니다.

컴파일
코드:
$ ocamllex tLexer.mll
$ ocamlyacc tParser.mly


사용하기
코드:
let parse_map s =
  let lexbuf = Lexing.from_string s in
  TParser.parse_map TLexer.start lexbuf

let m1 = parse_map "a|b"
let m2 = (Branch (End (NameBox "a"), End (NameBox "b")))
let _  = print_string (string_of_bool (m1 = m2))
(* "true" 출력 *)


tLexer.mll
코드:
{
 open TParser
 exception Eof
 exception LexicalError
 let verbose1 s =  (* (print_string s; print_newline(); s) *) s
 let verbose2 s =  (* (print_string s; print_newline()) *) ()
}

let blank = [' ' '\n' '\t' '\r']+
let name = ['a'-'z']

rule start =
 parse blank { start lexbuf }
     | name { let id = verbose1 (Lexing.lexeme lexbuf) in ID id }
     | "*" { verbose2 "*"; STAR}
     | "]" { verbose2 "]"; RB}
     | "[" { verbose2 "["; LB}
     | "|" { verbose2 "|"; BAR}
     | "(" { verbose2 "("; LP}
     | ")" { verbose2 ")"; RP}
     | eof { verbose2 "eof"; EOF}
     | _ {raise LexicalError}


tParser.mly
코드:
%token <string> ID
%token STAR LB RB BAR
%token LP RP
%token EOF

%start parse_map
%type <Hw4_2.map> parse_map

%%

parse_map: map EOF { $1 }
    ;

map:
      LP map RP { $2 }
    | ID   { End (NameBox $1) }
    | STAR { End (StarBox) }
    | map BAR map { Branch ($1, $3) }
    | LB ID RB map { Guide ($2, $4) }
    ;
%%
위로
사용자 정보 보기 비밀 메시지 보내기
이성환



가입: 2014년 9월 9일
올린 글: 34

올리기올려짐: 2014년10월24일 14:05    주제: 인용과 함께 답변

자료 감사합니다.
위로
사용자 정보 보기 비밀 메시지 보내기
이전 글 표시:   
글 쓰기   답변 달기     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2014) 시간대: GMT + 9 시간(한국)
페이지 11

 
건너뛰기:  
새로운 주제를 올릴 수 없습니다
답글을 올릴 수 없습니다
주제를 수정할 수 없습니다
올린 글을 삭제할 수 없습니다
투표를 할 수 없습니다


Powered by phpBB 2.0.21-7 (Debian) © 2001, 2005 phpBB Group
Translated by kss & drssay