我遵循“编程语言:应用和解释”
http://www.cs.brown.edu/~sk/Publications/Books/ProgLangs/2007-04-26/plai-2007-04-26.pdf(第21页)
现在我正在研究第21页,包含所有测试用例。 我只能通过第一个,而所有“with”失败的测试用例。我意识到我的解析器没有声明来处理“with”。
这是我的解析器:
(define (parse sexp)
(cond
[(number? sexp)(num sexp)]
[(list? sexp)
(case (first sexp)
[(+) (add (parse (second sexp))
(parse (third sexp)))]
[(-) (sub (parse (second sexp))
(parse (third sexp)))])]))
所以你可以帮忙吗,因为这个解析函数会导致我上面的测试失败? 感谢。
答案 0 :(得分:3)
您的解析器远非完整的解析器,因此尝试处理with
的实际实现并不是您应该尝试的。如果您在某些课程中考虑这一点,您肯定需要咨询课程人员。如果您自己尝试这样做,那么您需要慢慢处理并确保在获得其余代码之前有一个有效的解析器。
可以帮助您的一个资源是我的class notes,其中包含此类解析器的示例。 (我现在只需要涵盖材料中的确切点,顺便说一下。)但是如果你确实使用它,那么你应该注意到它在很多方面与PLAI代码不同 - 语言是一种打字语言,不简单的计划;我们编写的解析器使用match
,整个程序组织略有不同。尽管如此,如果你自己这样做,它应该会让你大致了解如何继续进行,并且卡住了。
答案 1 :(得分:1)
实际上,如果你继续阅读,
当我们认为我们已经完成时,我们发现上面的几个测试用例(你能确定哪些?)会产生一个自由标识符错误
他解释了为什么“with”表达式失败。