Форум программистов, компьютерный форум, киберфорум
Наши страницы
Haskell
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Neraving
0 / 0 / 0
Регистрация: 26.11.2012
Сообщений: 10
1

Парсинг через Parsec

20.03.2013, 18:16. Просмотров 855. Ответов 1
Метки нет (Все метки)

Собственно только начал изучать язык, и наткнулся на красивейший уже реализованный парсинг. Но он оказался достаточно сложен для моего понимания, слишком уж там много всего. Может кто ответить как в нем (Text.Parsec) реализован Try.
или же как можно решить проблему типа
parserr.hs:57:13:
Ambiguous occurrence `try'
It could refer to either `Text.Parsec.try',
imported from `Text.Parsec' at parserr.hs:1:21-23
(and originally defined in `Text.Parsec.Prim')
or `Text.ParserCombinators.Parsec.try',
imported from `Text.ParserCombinators.Parsec' at parserr.hs:3:1-36
(and originally defined in `Text.ParserCombinators.Parsec.Prim')

Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import Text.Parsec (try)
import Text.ParserCombinators.Parsec.Prim
import Text.ParserCombinators.Parsec
 
 
test prs str = runP prs () "" str
 
number :: Parser Int
number = do
    x <-  many digit
    return (read x) 
    
lbracket :: Parser Char
lbracket = char '('
 
rbracket :: Parser Char
rbracket = char ')'
 
bracketandnumber :: Parser Int
bracketandnumber = do
    lbracket 
    r<-norm
    rbracket 
    return r
    
 
operator :: Parser {-- Char --} (Int -> Int -> Int)
operator = do
    c <- char '-' <|> char '+' <|> char '*' <|> char '/'
    case c of
        '+' -> return (+)
        '-' -> return (-)
        '*' -> return (*)
        '/' -> return (div)
 
numberandoperator = do 
    x <- number; 
    f <- operator; 
    y <- norm; 
    return ( f x y ) 
    
 
norm = do 
    try numberandoperator
    <|> try  bracketandnumber
    <|> try  number
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2013, 18:16
Ответы с готовыми решениями:

Разбор url адреса с библиотекой Parsec
Хочу разобрать url адрес. До &quot;www&quot; разбор происходит нормально. Дальше возникла проблема - &quot;www&quot;...

Использование библиотеки Parsec, для форматирования списка телефонных номеров
Нижеприведенный код необходимо реализовать с использованием библиотеки Parsec data Result a =...

Коррекция HTML или Научите меня пользоваться Text.Parsec
Моя электронная книжка, при чтении файлов html не понимает многие html тэги. Но, особенно достаёт...

Парсинг через WebBrowser
Вопрос банальный, но все же. С рейтинговой системы ТО мне нужно спарсить значения. Например -...

Парсинг через WebClient
Мне нужно парсить эту страницу...

1
korvin_
2783 / 2055 / 369
Регистрация: 28.04.2012
Сообщений: 6,974
20.03.2013, 18:42 2
Тебе текст ошибки в гугл-транслейт закинуть или сам справишься?

Вкратце: оба модуля (Text.Parsec и Text.ParserCombinators.Parsec) экспортируют один и тот же символ — try, возникает коллизия имен, компилятор не может угадать, какой try тебе нужен. Решение: либо убрать импорт одного из модулей, либо (если таки оба нужны) скрыть лишний try с помощью hiding. Дальше сам нагуглишь.
2
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.03.2013, 18:42

Парсинг через AngleSharp
пытаюсь обратиться к тегу div что не так? пишу недавно на C# точной информации не могу найти по...

Парсинг с сайта через WebBrowser
Нужно спарсить прокси с одного сайта. Там стоит похоже защита от DDOS поэтому обычными методами не...

Парсинг сайта через cURL
Добрый день. Пытаюсь спарсить страницу кинопоиска. Любые другие сайты удается без проблем....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.