другая схема для начинающих - PullRequest
0 голосов
/ 26 января 2010

Я изучаю «Языки программирования: применение и интерпретация»

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

Так не могли бы вы помочь, потому что эта функция синтаксического анализа, которая вызывает мои вышеописанные тесты, не сработала? Спасибо.

Ответы [ 2 ]

3 голосов
/ 26 января 2010

Ваш синтаксический анализатор далек от завершения, поэтому попытка справиться с реальной реализацией with - это еще не то, что вы должны попробовать. Если вы берете это в контексте какого-то урока, вам обязательно нужно проконсультироваться с персоналом курса. Если вы пытаетесь сделать это самостоятельно, то вам нужно действовать медленно и убедиться, что у вас есть работающий парсер, прежде чем вы приступите к остальной части кода.

Один ресурс, который может помочь вам в этом, - мои примечания к классу , которые содержат пример для таких анализаторов. (Между прочим, я только что изложил эту точную точку в материале сегодня.) Но если вы все же используете это, то вы должны заметить, что он расходится с кодом PLAI по ряду аспектов - язык является типизированным языком, непонятная схема; парсеры, которые мы пишем, используют match, и вся организация программ немного отличается. Тем не менее, это должно дать вам общее представление о том, как действовать, если вы делаете это самостоятельно, и застряли.

1 голос
/ 26 января 2010

На самом деле, если вы читаете дальше,

Как раз тогда, когда мы думали, что мы закончили, мы обнаружили, что в нескольких из приведенных выше тестовых примеров (можете ли вы определить, какие из них?) Выдается ошибка свободного идентификатора

Он объясняет, почему выражения "с" терпят неудачу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...