2010-02-25 8 views
2

중첩 된 함수 호출이 작동하지 않는 이유가 궁금합니다.Scheme 컴파일러의 문제점은 무엇입니까?

그의 논문에서 Dybvig의 힙 기반 모델 http://www.cs.indiana.edu/~dyb/pubs/3imp.pdf 3 장을 구현 중입니다.
JavaScript로 작업하고 있습니다. 출처 : http://github.com/z5h/zb-lisp
거의 모든 것이 현재 parser.js에 있습니다.

실행하려면, 방화범이 끌려와 파이어 폭스에서

  1. 부하 인 test.html.
  2. Evaluator.newEvaluator(). eval ("scheme code goes here");
  3. 코드 끝 부분에 공백을 약간 남겨 두십시오. 파서가 지금 당장 깨 졌으므로 끝에있는 공백에 의존합니다. (고침). 예 : .eval("12 ") not .eval("12")

많은 것들이 작동합니다. 이 작품 및 5 반환 : :하지만 중첩 된 함수에 문제가 있어요 호출
(set! i (lambda (x) x)) (set! ii (i i)) (ii 5)
이 작동하지 않습니다
(set! i (lambda (x) x)) (i (i 5))
을 아니다이 작업을 수행합니다
(set! i (lambda (x) x)) ((i i) 5)

문제는 라인 주위에

수 있습니다 중첩 된 호출이 컴파일되거나 프레임 또는 적용 코드의 코드에서 사용할 수 있습니다. PDF의 섹션 3.4.2는 샘플 구현이 설명 된 곳입니다.

이것은 매우 복잡한 질문입니다. 코드에는 많은 거친 모서리가 있습니다.
모든 의견을 환영합니다.

구현에 대한 질문에 기꺼이 답변 해 드리겠습니다.

+0

질문을 조금 좁힐 수 있다면 사람들은 대답하는 경향이 더 클 수 있습니다. SO에 관한 질문은 "상세하고 구체적"이도록 권장됩니다. – Jimmy

+0

잘하면 지금은 분명합니다. 내 문제는 중첩 된 함수 호출입니다. – z5h

답변

0

나는 값 리브를 일찍 청소했다.

향상된 코드는 내 github에서 사용할 수 있습니다.

관련 문제