노윤철
가입: 2026년 3월 4일 올린 글: 3
|
올려짐: 2026년5월17일 10:06 주제: [숙제 7] let rec id의 우변이 임의의 식인 경우 |
|
|
안녕하세요?
숙제 7 중 M 언어의 파싱과 관련하여 질문 드리려고 합니다.
| 코드: |
let val fib = fn x =>
if x = 0 then
0
else if x = 1 then
1
else (fib2 (x-1) + fib2 (x-2))
in
let rec fib2 = fib in
write fib2 (9)
end
end
|
위 M 프로그램에서는 let rec의 우변에 fn id => e 가 아닌 expression이 들어오고 있습니다.
(let rec fib2 = fib)
| 코드: |
e ::= ... | let bind in e end | ...
bind ::= val id = e | rec id = fn id => e
|
물론 fib의 값이 어떤 함수로 계산되는 것은 맞지만, M의 syntax에 따르면 위 프로그램은 올바른 M 프로그램이 아닌 것으로 보입니다. syntax는 rec id = fn id => e의 꼴이 되어야 한다고 명시하고 있는데, 이를 따르지 않기 때문입니다.
그런데 이 프로그램을 실행해보니 파싱도 정상적으로 되고, 제가 현재 구현한 M 실행기도 문제 없이 어떤 값을 출력합니다.
이렇게 M의 syntax를 위반하지만 파싱이 정상적으로 되는 경우는 입력으로 주어지지 않는다고 가정해도 되는지, 아니면 M 실행기가 문제를 찾아낼 수 있도록 해야 하는지 궁금합니다.
감사합니다.
노윤철 올림 |
|