2010-01-26 65 views
0

我下面“编程语言:适用和解释”另一个方案初学者问题

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)))])])) 

所以,请你帮忙是因为它导致我上面的测试失败,这个解析功能? 谢谢。

回答

3

你的解析器远非完整解析器,所以试图处理with的实际实现并不是你应该尝试的事情。如果你在某个课程的背景下学习,你肯定需要咨询课程人员。如果你自己尝试这样做,那么你需要慢慢采取行动,并确保你有一个工作解析器,然后再到代码的其余部分。

一个可以帮助你的资源是我的class notes,它包含了这样的解析器的例子。 (我只是在今天的材料中说明了这一点),但是如果你真的使用它,那么你应该注意它在许多方面与PLAI代码不同 - 语言是一种类型化的语言,不是简单的计划;我们编写的解析器使用match,并且程序的整个组织略有不同。不过,如果你自己这样做,它应该给你一个粗略的想法,然后卡住。

1

其实,如果你看过进一步上,

正当我们以为我们做了,我们发现,对上述几个测试用例(你可以决定哪些?)生成一个自由的标识符错误

他解释了为什么“with”表达式失败。

+0

不,这不是罗伯特所具有的问题 - 该部分讨论了替换函数实现中的问题,但在上面的解析器中,并没有第一个产生这种表达式的情况。 – 2010-01-26 19:52:39

+0

哎呀!在查看他使用的参考资料之前,我应该更清楚地阅读他的代码。 – Don 2010-01-26 20:06:30