|
|
이전 주제 보기 :: 다음 주제 보기 |
글쓴이 |
메시지 |
김은상 손님
|
올려짐: 2006년5월30일 16:01 주제: 질문 하나 더 할게요. |
|
|
진민식 씀: |
C-- 의 semantics에 의하면 주소에 대해서는 연산이 정의되어 있지 않습니다. 그리고 정수값을 address로도 사용할 수 없습니다.
이 경우는 runtime error가 될 것 입니다.
|
라고 하셨는데요.
syntax에서는, E -> E+E | .... *x | &x 라고 되어 있으니,
x = *y + 1; (1)
x = &y + 1; (2)
이 가능하지 않나요?
그럼 syntax상으로는 가능한 expression이지만, semantics상으로 정의되어 있지 않은 expression은 runtime error가 되는 것이겠죠?
그리고 test input으로 syntax에 어긋나는 input은 들어오지 않는다고 가정해도 되겠죠? ( 머, 그런건 파싱이 안되겠지만요. ㅎㅎ ) |
|
위로 |
|
|
진민식
가입: 2006년 3월 21일 올린 글: 67
|
올려짐: 2006년5월30일 16:09 주제: |
|
|
인용: | syntax에서는, E -> E+E | .... *x | &x 라고 되어 있으니,
x = *y + 1; (1)
x = &y + 1; (2)
이 가능하지 않나요? |
네 syntax 상으로는 가능합니다.
하지만 parser와 함께 제공된 C--의 문서를 보시면,
위와 같은 상황에서는 semantics가 정의되어 있지 않습니다.
인용: | 그리고 test input으로 syntax에 어긋나는 input은 들어오지 않는다고 가정해도 되겠죠? ( 머, 그런건 파싱이 안되겠지만요. ㅎㅎ )
|
네 concrete syntax에 맞지 않는 input은 parsing이 안되겠죠.
하지만 syntax에는 맞지만 semantics에는 맞지 않는 input이 들어 올 수는 있습니다. |
|
위로 |
|
|
김은상 손님
|
올려짐: 2006년5월30일 22:43 주제: Re: 질문 하나 더 할게요. |
|
|
진민식 씀: |
C-- 의 semantics에 의하면 주소에 대해서는 연산이 정의되어 있지 않습니다. 그리고 정수값을 address로도 사용할 수 없습니다.
이 경우는 runtime error가 될 것 입니다.
|
여기서 또 의문점이 생겼는데요.
semantic domain에 보면
v < Val = Z+Loc+B ( < 는 포함관계 )
이고, semantic judgement에서는
MㅏE1=>v1, MㅏM2=>v2
-----------------------------
MㅏE1+E2=>v
이니까 Loc에 대해서도 연산이 정의된 것 아닌가요? 아니면 semantics에서의
v값은 '정수'라고 봐야 하는지요? 이것때문에 무지 헷갈리네요...
v값을 정수라고 보는게 맞는거 같은데, domain 정의에서 v는 Z+Loc+B라고 되어있어서요... |
|
위로 |
|
|
김은상 손님
|
올려짐: 2006년5월30일 22:49 주제: |
|
|
아니면, v < Val=Z+Loc+B 이고,
+,- 연산은 Z에만 정의되어 있고, Loc, B에는 정의되어 있지 않다는 의미인가요?
그렇다면,
x:=1;
y:=&x;
z:=&y
이런 식으로, 더블포인터도 가능한 command인지 궁금하네요.
MㅏE=>v
------------------------
Mㅏx:=E=>M{x->v}
에서 v가 정수만 아니라 Loc도 가능하다면 위에서 예로 든 command도 semantics상에서 정의가 된건데 말이죠... |
|
위로 |
|
|
진민식
가입: 2006년 3월 21일 올린 글: 67
|
올려짐: 2006년5월31일 11:15 주제: |
|
|
인용: | emantic domain에 보면
v < Val = Z+Loc+B ( < 는 포함관계 )
이고, semantic judgement에서는
MㅏE1=>v1, MㅏM2=>v2
-----------------------------
MㅏE1+E2=>v
이니까 Loc에 대해서도 연산이 정의된 것 아닌가요? 아니면 semantics에서의
v값은 '정수'라고 봐야 하는지요? 이것때문에 무지 헷갈리네요...
v값을 정수라고 보는게 맞는거 같은데, domain 정의에서 v는 Z+Loc+B라고 되어있어서요... |
+, - 는 정수에 대해서만 정의된 것이 맞습니다.
(C--에서 주소는 Variablename(string)이므로)
인용: | 그렇다면,
x:=1;
y:=&x;
z:=&y
이런 식으로, 더블포인터도 가능한 command인지 궁금하네요. |
위와 같은 경우는 올바르게 semantics 를 따른 것입니다.
다만, C와는 다르게, **x 처럼 두번 연속 deref하는 operation을 할 수는 없습니다.
t := *z;
t := *t
이런 식으로 나누어서 쓸 수 밖에 없습니다. |
|
위로 |
|
|
|
|
새로운 주제를 올릴 수 없습니다 답글을 올릴 수 없습니다 주제를 수정할 수 없습니다 올린 글을 삭제할 수 없습니다 투표를 할 수 없습니다
|
Powered by phpBB 2.0.21-7 (Debian) © 2001, 2005 phpBB Group Translated by kss & drssay
|