0
首先,這是作業。我不打算得到一個完整的解決方案,但我堅持如何解釋這個問題。抽象/具體語法的序列創建(方案)
我們基本上是從詞法分析器和解析器中爲我們在課堂上創建的語言做出解釋。
具體來說,就是我被困在正在使用計劃/ Drracket實現使用調用該方法的解析器「讓-SEQ」,可以通過以下規則定義創建序列:
(make-seq (e)) = e
(make-seq (e1 e2 ... en)) = (make-let '*temp* e1 (make-seq (e2 ... en)))
在哪裏使-LET的定義是:
(define (make-let var exp1 exp2)
(list 'let var exp1 exp2))
我實現了在make-seq的方法:
(define (make-seq e)
(if (null? (cdr e))
e
(make-let '*temp* (car e) (make-seq (cdr e)))))
但我不知道如何在上面的規則中表示'temp。我相當肯定,我不應該在實現中實際使用符號'temp,但我不確定我應該在那裏做什麼。
任何人都可以給我指點,我應該如何前進呢?
謝謝!
也許使用'gensym'生成一個永遠不會與對象語言中的標識符衝突的唯一標籤? –