게시판 인덱스

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

8-1의 디버깅을 위한 코드 일부

 
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2015)
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
김형모



가입: 2014년 9월 3일
올린 글: 37

올리기올려짐: 2015년12월15일 5:32    주제: 8-1의 디버깅을 위한 코드 일부 인용과 함께 답변

코드:

(* for DEBUG *)
let debug = true

exception DO_YOURSELF

(* stack indentation level *)
let cnt = ref 0
let inc () = cnt := !cnt + 1
let dec () = cnt := !cnt - 1

let print_indent () =
  let rec pp i =
    if i <= 1 then ()
    else let _ = print_string " | " in pp (i - 1)
  in let _ = pp !cnt in print_string " "

(* push/pop call stack *)
let call str =
  if debug then
    let _ = inc () in
    let _ = print_indent () in
    print_string (str ^ "\n")
  else ()
let ret str =
  if debug then
    let _ = print_indent () in
    let _ = print_string (str ^ "\n") in
    dec ()
  else ()

(* print debug message *)
let deb str =
  if debug then
    let _ = print_indent () in
    print_string ("* " ^ str)
  else ()
let prt : typ -> unit =
  let rec iter : typ -> unit =
    fun t ->
      match t with
      | TInt -> print_string "Int"
      | TBool -> print_string "Bool"
      | TString -> print_string "String"
      | TPair (t1, t2) ->
          let _ = print_string "(" in
          let _ = iter t1 in
          let _ = print_string ", " in
          let _ = iter t2 in
          print_string ")"
      | TFun (t1, t2) ->
          let _ = print_string "(" in
          let _ = iter t1 in
          let _ = print_string " → " in
          let _ = iter t2 in
          print_string ")"
      | TLoc t ->
          let _ = iter t in
          print_string "_Loc"
      | TVar v -> print_string ("Var " ^ v)
      | _ -> raise DO_YOURSELF
    in
  fun t ->
    if debug then
      let _ = iter t in
      print_string "\n"
    else ()

(* decide gen-type with sim-type *)
let is_gen : typ_scheme -> bool =
  fun tyscm ->
    match tyscm with
    | GenTyp _ -> true | _ -> false


8-1의 디버깅이 print_string으로 찍는 수밖에 없는데, 케이스에 따라 출력이 길어지면 보기 힘들어서 만들었습니다.
raise DO_YOURSELF 부분을 본인의 구현에 따라 고치거나 지워서 사용하시면 될 것 같습니다.
허접하지만 공유해봅니다.

용례 :

let val x = 2 in
let val x = 3 in
x
end
end
[Let Val] x
* t -> Var x_1
| [Int]
| * t -> Var x_2
| * t <- Int
| [Int]
* e1 solved : Int
* expand e1 = false
* x-sim <- Int
| [Let Val] x
| * t -> Var x_1
| | [Int]
| | * t -> Var x_3
| | * t <- Int
| | [Int]
| * e1 solved : Int
| * expand e1 = false
| * x-sim <- Int
| | [Var] x
| | * t -> Var x_1
| | * t-sim <- Int
| | [Var] x
| * e2 solved = t : Int
| [Let Val] x
* e2 solved = t : Int
[Let Val] x
==========[ Equation Solved ]==========
>>> int
위로
사용자 정보 보기 비밀 메시지 보내기
이전 글 표시:   
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2015) 시간대: GMT + 9 시간(한국)
페이지 11

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


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