게시판 인덱스

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

HW3 뼈대를 다시 받으세요.

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



가입: 2005년 9월 5일
올린 글: 167

올리기올려짐: 2007년10월7일 18:55    주제: HW3 뼈대를 다시 받으세요. 인용과 함께 답변

제가 실수로 환경에 closure를 빠뜨렸습니다. Embarassed
또, call by reference parsing도 되지 않습니다.
뼈대를 다시 받으시고, 이미 3.n을 고치신 분은
3.n 파일 313줄을
코드:
env_entry = Addr of Loc.t | Proc of id * exp * env

317줄의 env_loc 함수를
코드:
   fun env_loc x e =
        (case Env.lookup x e of
           Addr l => l
         | Proc _ => raise (Error "not allowed")) handle
          Env.Not_bound => raise (Error "not bound")

로 바꿔주세요.
번거롭게 해서 죄송합니다. Crying or Very sad
위로
사용자 정보 보기 비밀 메시지 보내기 이메일 보내기 글 올린이의 웹사이트 방문
한재화



가입: 2007년 10월 6일
올린 글: 25

올리기올려짐: 2007년10월7일 19:32    주제: 왜 env_loc 의 리턴값이 Proc 타입이면 exception을 발생하나요? 인용과 함께 답변

env_loc이 리턴하는 env_entry에는 Proc 타입도 포함되어 있지 않습니까?

저는 env_loc 이 env_entry 타입을 반환한다 하고 뒤에 Addr l => l 이나 Proc _ => 같은 case 처리 없이 env_loc 을 쓰는 곳에서 저 값을 분류하도록 했는데 상관없는지요
위로
사용자 정보 보기 비밀 메시지 보내기
김경동
손님





올리기올려짐: 2007년10월7일 19:41    주제: 뼈대를 바꿨는데요~ 인용과 함께 답변

조교님이 올려주신 뼈대를 바꾸고 나니

잘되던 test4.k-가 parsing이 안되는데 저만 그런지요..

그리고 작업하던 numch도 되던 parsing이 안되는;;;

그리고 env_loc도 제가 Procedure가 포함된 형태로 바꿨는데 상관없는지요.

밑에 3.n은 마음대로 수정해도 된다고 하셔서 제가 임의로 env_loc도 바꿨거든요.
위로
김현서
손님





올리기올려짐: 2007년10월7일 19:54    주제: 저도 파싱 에러가 납니다. 인용과 함께 답변

저도 새 뼈대를 깔고 실행해 봤더니 예제 4에서 파싱 에러가 납니다.

저만 그런 줄 알고 당황했었는데 다행(?)이네요.
위로
한상욱



가입: 2007년 9월 23일
올린 글: 5

올리기올려짐: 2007년10월7일 20:35    주제: 저도 파싱에러가 나네요. 인용과 함께 답변

뼈대를 바꾸고 나니 윗분들과 마찬가지로 test4.k-에서 파싱에러가 납니다.

그리고 아래글에 어떤 분이 올리셨던 코드도 파싱에러가 나네요.

코드:
(* recursive - factorial *)

let
   proc fac(x) =
      if not (x < 1) then (x * fac(x-1))
      else (1)
   ;
   x := 0
in
   read x;
   write fac(x)
위로
사용자 정보 보기 비밀 메시지 보내기
남기웅
손님





올리기올려짐: 2007년10월7일 21:11    주제: 인용과 함께 답변

헉... 3.n 에서 그 부분은 각자 스스로 해결해 보라는 뜻에서 Proc 은 빼신 것으로 추측했었는데 ㅎㅎ
위로
김지수
손님





올리기올려짐: 2007년10월8일 0:37    주제: parsing error 인용과 함께 답변

추측컨데 parsing error는 "<"의 왼쪽에 문자가 올 때 생기는 듯 하네요.
아래의 코드를 run -pp로 해 보면
두 주석 괄호 중 어느 하나라도 빼면 에러가 납니다.

let x:=0 in
let y:=0 in
0<0;
0<x
(*
;x<0
*)
(*
;x<y
*)
위로
정영범



가입: 2005년 9월 5일
올린 글: 167

올리기올려짐: 2007년10월8일 14:57    주제: 인용과 함께 답변

김지수 학생이 적은대로
x < 0 (* expr < expr *)
f < x > (* ID < ID > *)
둘이 충돌이 나서 parsing이 안되고 있습니다. shift를 할 지 reduce를 시킬건지 결정을 못하고 있습니다.

고쳐서 다시 올리도록 하겠습니다. 죄송합니다. Embarassed
위로
사용자 정보 보기 비밀 메시지 보내기 이메일 보내기 글 올린이의 웹사이트 방문
정영범



가입: 2005년 9월 5일
올린 글: 167

올리기올려짐: 2007년10월8일 15:19    주제: 인용과 함께 답변

다시 올렸습니다. Embarassed
다시는 이런 일이 없도록 하겠습니다. 죄송합니다.
위로
사용자 정보 보기 비밀 메시지 보내기 이메일 보내기 글 올린이의 웹사이트 방문
한재화



가입: 2007년 10월 6일
올린 글: 25

올리기올려짐: 2007년10월8일 16:19    주제: 새로이 올라온 뼈대를 쓰지 않고, 기존에 있는 뼈대를 고쳐서 써도 되나요.. 인용과 함께 답변

조교님께서 올리신 뼈대는, env_entry 가 Addr과 Proc의 두 개의 방법으로 만들어질 수 있는 타입임에도, env_loc의 리턴값이 Proc 일때는 exception을 raise 하셨더군요.
코드:

    fun env_loc x e =
        (case Env.lookup x e of
           Addr l => l
         | Proc _ => raise (Error "not allowed")) handle
          Env.Not_bound => raise (Error "not bound")


그렇다면, 이런 경우에는 recursive call 같은 것을 구현하기에는 어려움이 있다고 봅니다. 저같은 경우는 env_loc을
코드:

fun env_loc x e = (Env.lookup x e) handle Env.Not_bound=> raise (Error "not bound")

와 같이 다시 정의했는데, 제가 만든 것으로 계속 써도 가능할런지요.
위로
사용자 정보 보기 비밀 메시지 보내기
정영범



가입: 2005년 9월 5일
올린 글: 167

올리기올려짐: 2007년10월8일 16:45    주제: 인용과 함께 답변

env_proc 함수를 따로 정의하면 되지요. Very Happy
코드:
    fun env_proc f e =
        (case Env.lookup f e of
           Addr _ => raise (Error "not allowed")
         | Proc p => p) handle
          Env.Not_bound => raise (Error "not bound")

구분 없이 편하게 사용하기 위해 한재화 학생처럼 사용하셔도 됩니다.
그런데, 혹시라도 location을 꺼내려는데 함수가 나오는 경우에 에러처리를 위해서 구분을 한 것입니다.
위로
사용자 정보 보기 비밀 메시지 보내기 이메일 보내기 글 올린이의 웹사이트 방문
남기웅
손님





올리기올려짐: 2007년10월8일 19:38    주제: 인용과 함께 답변

새로 뼈대 파일을 다운로드 받고

nmakegen -f 를 실행하니까

shift reduce conflict 가 1개 있다고 메시지가 나오는데 괜찮은 건가요?

이후의 프로그램 실행에는 문제는 없는거 같은데요.
위로
정영범



가입: 2005년 9월 5일
올린 글: 167

올리기올려짐: 2007년10월8일 19:48    주제: 인용과 함께 답변

예, 문제 없습니다.
shift를 할지 reduce를 할지 conflict가 생기는데 항상 shift해서 parsing을 진행하도록 했습니다.
룰을
EXP < EXP (* LESS *)
| EXP < EXP > (* CALLR *)
로 바꾸고 EXP1 EXP2가 ID가 아니면 parsing error를 내도록 했습니다.

conflict 자체를 없애는 방법은 현재로선 없는 것 같습니다. Mad

함수 호출에 키워드를 넣거나 <>를 다른 것으로 바꾸면 쉽게 해결할 수는 있겠죠.
call f <x> 혹은
f [x]
이런 식으로요.
위로
사용자 정보 보기 비밀 메시지 보내기 이메일 보내기 글 올린이의 웹사이트 방문
이전 글 표시:   
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2007) 시간대: GMT + 9 시간(한국)
페이지 11

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


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