Не допускайте потери неоднозначности

Nov 06, 2016 12:55

Часто парсеры пишут в виде, допускающем разбор неоднозначных грамматик
newtype Parser a = Parser { apply :: String -> [(a, String)] } (Тип apply это не что иное, как стандартный ReadS.) Однако, начав таким образом, лучше быть консистентным, поддерживая эту возможность повсюду, например
parse :: Parser a -> String -> [a ( Read more... )

fprog, haskell, сборник задач и упражнений по Хаскелю, fp

Leave a comment

Comments 6

sassa_nf November 6 2016, 13:49:49 UTC

instance Applicative Parser where
pure a = Parser $ \s -> [(a, s)]
(Parser ps) <*> (Parser qs) = Parser $ \s -> [ (f a, t)
| (f, s') <- ps s
, (a,t) <- qs s'
]

instance Alternative Parser where
empty = Parser $ const []
(Parser ps) <|> (Parser qs) = Parser $ (++) <$> ps <*> qs

Reply

deni_ok November 6 2016, 13:57:30 UTC
Ага, верно.
Спрячу на недельку, чтобы студенты не подглядели.

Reply

kurilka November 6 2016, 18:25:37 UTC
Денис, а какова судьба продолжения курса на stepic?

Reply

deni_ok November 6 2016, 19:30:20 UTC
Февраль ориентировочно. Видишь, задачки придумываем)

Reply


Leave a comment

Up