еще одна схема новичка вопрос

Я слежу за "Языками программирования: применение и интерпретация"

http://www.cs.brown.edu/~sk/Publications/Books/ProgLangs/2007-04-26/plai-2007-04-26.pdf (стр. 21)

Сейчас я работаю над страницей 21 со всеми тестовыми примерами. Я смог пройти только первый, в то время как все тестовые примеры, в которых было указано «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)))])]))

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


person Kevin    schedule 26.01.2010    source источник


Ответы (2)


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

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

person Eli Barzilay    schedule 26.01.2010

Собственно, если читать дальше,

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

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

person Don    schedule 26.01.2010
comment
Нет, проблема Роберта не в этом - эта часть говорит о проблемах в реализации функции подстановки, но в приведенном выше синтаксическом анализаторе нет случаев, которые в первую очередь генерируют такие выражения. - person Eli Barzilay; 26.01.2010
comment
Ой! Мне следовало более четко прочитать его код, прежде чем искать ссылку, которую он использовал ... - person Don; 26.01.2010