게시판 인덱스

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

풍성한 한가위에 질문드립니다

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



가입: 2009년 9월 26일
올린 글: 50

올리기올려짐: 2009년10월4일 13:13    주제: 풍성한 한가위에 질문드립니다 인용과 함께 답변

한가위에도 역시 버벅거리고 있는 중입니다.

1. '파서'라는게 잘 이해가 안되는데요.
그러니까 파서의 역할이
K--로 작성된 프로그램 ( let id := e1 in e2)
을 받아서 OCaml용으로 (LETV id e1 e2)
자동으로 번역해주는게 맞나요?

2. 만약 그렇다면 제가 할일은
LETV가 semantics에 맞게 잘 돌아가도록 정의하는 일이 되겠죠?

3. 아니라면 뭘해야 할까요....

4. 그리고! let x := e in e 구문을 사용할때
test용 파일을 살펴보니까 마지막의 e는 주로 생략되는 것 같은데
이녀석의 역할은 무엇인가요?

5. VAR의 semantics : sigma, M ㅏ x => M(sigma(x)), M
이게 잘 해석이 안되네요..
환경(sigma)와 메모리(M)에서 x를 받아
sigma에 x를 bind하고 그것을 다시 M에 저장하라는 의미인가요?

6. 질문이 계속 늘어나는데요..
run 함수가 mem*env*pgm -> value 형태인데
그렇다면 결과값이
Num 1 , Bool true, Unit
이런형태로 나와야 하는건가요?

6-1. Semantics들이 말하는 바는 주어진 환경, 메모리에서 식(expression)을
넣으면 결과값(value)과 변경된 메모리(M'' 등..)를 돌려준다는 의미로
알고있는데, run함수는 value만 리턴하는 형태가 맞나요?
그렇다면 메모리의 변화는 내부적으로 일어나게 해야 하는건가요?
Mem과 Env 모듈에 있는 함수들을 어떻게 활용해야 할지.. 감이 안오네요
특히! Mem.alloc같은 경우는 결과값으로 (loc, mem')의 튜플이 나온다고
되어있는데 도데체 얘는 어떻게 사용되는 친구인지....


*. 질문할때마다 느끼지만, 조교님들이 참 수고하십니다.
위로
사용자 정보 보기 비밀 메시지 보내기
허기홍



가입: 2007년 9월 27일
올린 글: 231

올리기올려짐: 2009년10월4일 18:54    주제: 인용과 함께 답변

1. 파서란?
여러분이 작성하는 프로그램은 1차원으로 된 줄글이죠.
이를 주어진 문법에 맞게 해석하여 2차원 구조물로 만들어 주는 것이 파서입니다.

여기서 K-- 파서는 K-- 프로그램을 입력으로 받아서 program 타입으로 바꾸어주는 일을 합니다. 이것이 run 함수의 인자로 들어오는 그 pgm입니다.
program 타입선언은 K 모듈에 있죠?

노건일씨가 말씀하신 것이 대충 뜻은 맞는데 번역하는 것은 아닙니다.
파서는 주어진 프로그램을 받아서 문법에 맞는지 검사하고 2차원 구조물로 만들어 줍니다. hw3에 정의된 program(= exp) 타입은 그 구조를 표현하기 위한 것입니다.

이 2차원 구조물로 여러가지 일을 할 수 있습니다. 여러분들 숙제처럼 실행기를 만들 수 있고, 컴파일러 (이것이 번역기 입니다.)를 만들 수도 있습니다.

2. 네. 비단 LETV뿐만 아니라 모든 exp겠죠.

4. 흠. 잘못생각하고 계신것 같습니다. 제가 살펴보니 두번째 e 가 생략되는 경우는 하나도 없네요.

예를들어 test1.k--를 보시죠.
코드:

let x:= 1 in
let y:= 2 in
write x + y


이 프로그램은 크게 보면
let e1 in e2 입니다
e1 : (x:=1)
e2 : (let y :=2 in write x + y)

여기서 e2를 보아하니 또 let e3 in e4 꼴이네요.
e3 : (y:=2)
e4 : (write x + y)

e4도 쪼갤 수 있겠죠.


5. 아닙니다.
VAR라는 것은 예를 들어
코드:
write x + 1

라는 프로그램에서 x의 의미입니다.
x 값을 메모리로부터 읽어오는 일을 합니다.

그러기 위해서는 이런 과정이 필요합니다.
1. 현재 환경에서 x를 찾은 후 x가 있는 메모리 주소를 알아온다.
2. 메모리로 가서 그 주소에 저장된 값을 가져온다.

그 값이 바로 현재 x의 값입니다.

숙제 문서처럼 쓴 것은 환경과 메모리를 함수로 볼 수 있다는 것, 그리고 그 타입을 잘 생각해보시면 자연스러울 것입니다.


6. 네.

6-1.
run 함수는 숙제에서 명시했듯이 값을 리턴하셔야 합니다.
대신 내부에서는 메모리 변화를 계속 다루어 주셔야죠.
Mem과 Env 활용은 제가 아래 글에 쓴 답변과 주석을 잘 살펴보세요.
alloc의 결과값은 (새로 나온 메모리 주소, 새 주소를 포함한 새 메모리) 입니다.

(노파심에서) OOP 프로그래밍과 착각하지마세요. 메모리, 환경 등은 객체가 아닙니다. 한번 정해진 상태가 바뀌지 않습니다. 그러므로 alloc을 한다고 해서 이전 메모리가 바뀌는 것이 아니라 새로운 메모리를 리턴해 주는 것입니다.


답변이 되셨는지 모르겠습니다. 저도 글로 자세히 설명하기가 힘드네요.
잘 모르시겠으면 연구실로 찾아오세요.
위로
사용자 정보 보기 비밀 메시지 보내기 이메일 보내기 글 올린이의 웹사이트 방문
노건일



가입: 2009년 9월 26일
올린 글: 50

올리기올려짐: 2009년10월4일 19:30    주제: 인용과 함께 답변

아.. 설명이 이렇게 명쾌할 수가 없군요
감사합니다~ Smile

더 씨름해보다가 안되겠으면 들고 가겠습니다
위로
사용자 정보 보기 비밀 메시지 보내기
노건일



가입: 2009년 9월 26일
올린 글: 50

올리기올려짐: 2009년10월4일 19:59    주제: 인용과 함께 답변

정말 질문의 세계는 끝이 없는것 같습니다.

1. run 함수를 재귀적으로 정의해도 될까요?

2. semantics에 따르면
TRUE, NUM, VAR 등은 메모리의 변화를 일으키지 않고,
ADD, SEQ 등은 메모리의 변화가 발생해야 하는(혹은 할 수도 있는)...
이 맞나요?
위로
사용자 정보 보기 비밀 메시지 보내기
허기홍



가입: 2007년 9월 27일
올린 글: 231

올리기올려짐: 2009년10월4일 20:19    주제: 인용과 함께 답변

1. 재귀든 아니든 내부에서 어떻게 구현하든 숙제 요구조건만 만족하시면 됩니다.

2. 맞습니다. 이 동네에서는 보통 같은 이름은 항상 같은 것을 나타내고, 다른 이름 (M 과 M' 은 다르죠)은 항상 다른 것을 나타냅니다. 그게 편합니다.
위로
사용자 정보 보기 비밀 메시지 보내기 이메일 보내기 글 올린이의 웹사이트 방문
이전 글 표시:   
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2009) 시간대: GMT + 9 시간(한국)
페이지 11

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


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