Парскек Хаскеля соответствует if (3) как будто (3 > 0)

Я использую Parsec и пример версии boolExpr http://hpaste.org/86299 на данный момент. Я собираю на Windows через GHC.

Код выше будет соответствовать логическому выражению, как 3 < 4 или же a not 3 Однако это не будет соответствовать выражению, как 3, true или же (((3 < 1))), Может ли кто-нибудь дать мне совет о том, как сопоставить такие выражения, как 3 а также (((3 < 1))) такой же как 3 > 0 а также (((3 < 1))) > 0где>0 предполагается / добавляется автоматически в выражениях без RHS?

1 ответ

Решение

Похоже, вы пытаетесь вставить семантику вашего языка в синтаксический анализатор. "Правильная" вещь, которую нужно делать с точки зрения языков программирования, - это принимать как числовые, так и логические значения в вашем синтаксическом дереве. Затем на более позднем этапе - реконструкция типа без разбора - решите, что для числовых выражений добавляется один "> 0", а для логических выражений - нет.

Другие вопросы по тегам