Описание тега parsec
Parsec - это промышленная библиотека монадических комбинаторов синтаксического анализатора для Haskell.
0
ответов
Разбор файла с парсек
Я пытаюсь проанализировать файл [1], но приведенный ниже код не работает должным образом. import Control.Applicative hiding ( many , ( <|> ) ) import Text.Parsec import Text.Parsec.String (Parser) import qualified Text.Parsec.Token as T import…
27 июн '15 в 04:44
1
ответ
GHC не может найти библиотеки при новой установке Haskell-Platform
Я пытаюсь научиться использовать Haskell, но я столкнулся с небольшим препятствием. Я использую MacOSX 10.12.6 и установил платформу Haskell, используя: $ brew cask install haskell-platform без изменений. Когда я пытаюсь скомпилировать программу с p…
30 сен '17 в 07:52
1
ответ
Почему этот анализатор Parsec входит в бесконечный цикл?
Следующий синтаксический анализатор вводит бесконечный цикл для любого ввода. data Ast = Number Int | Identifier String | Operation Ast BinOp Ast deriving (Show, Eq) data BinOp = Plus | Minus deriving (Show, Eq, Enum) number = Number <$> read …
10 май '17 в 11:53
0
ответов
Text.Parsec.Indent, выбирающий контент без отступов
import Control.Applicative import Text.Parsec hiding (many, (<|>)) import Text.Parsec.Indent data Markup = Tag String [Markup] deriving (Show) run sourceName p source = runIndent sourceName (runParserT (many1 p <* eof) () sourceName source)…
05 фев '14 в 21:48
1
ответ
Haskell Parsec, адаптирующий oneOf к [String]
Я прохожу схему "Напиши себе" за 48 часов. symbol :: Parser Char symbol = oneOf "!#$%&|*+-/:<=>?@^_~" Это отлично подходит для символов, но что, если у меня есть список ключевых слов? (т.е. struct, int) можно ли адаптироваться к спискам? Э…
22 фев '13 в 14:11
2
ответа
Parsec: обработка перекрывающихся парсеров
Я действительно плохо разбираюсь в Haskell, но в основном это имеет смысл. Я работаю над созданием программы Templating в основном для лучшего изучения парсинга; шаблоны могут интерполировать значения через {{ value }} нотации. Вот мой текущий парсе…
20 апр '17 в 20:09
1
ответ
Есть ли способ заставить парсек сообщать о конфликтах "сдвиг-уменьшение"?
Я играю с парсек и понял, что у меня двусмысленная грамматика. Очевидно, это ошибка с моей стороны, но я вроде как привык к генераторам синтаксических анализаторов в стиле yacc, сообщая мне, что я тупой. Парсек просто ест персонажей в том порядке, в…
29 авг '12 в 04:13
1
ответ
Как быть устойчивым к заказу?
Учитывая вход в форме A,B,C где заказ не зафиксирован (например, C,B,A может быть тоже возможно), как бы я разобрать строку в кортеж (a,b,c) чтобы результат снова был упорядочен? Большой пример: Вход A: A 1 B 2 C 3 Вход B: C 3 B 2 A 1 Парсеры: a = "…
26 июн '13 в 21:50
2
ответа
Haskell Parsec - парсинг двух списков вещей
Я использую Advent of Code часть 16 в качестве предлога, чтобы научиться использовать Parsec, но я спотыкаюсь о том, как справиться с этим конкретным случаем. Ввод в следующем формате: Before: [3, 2, 3, 0] 2 3 1 1 After: [3, 2, 3, 0] Before: [1, 0, …
23 янв '19 в 20:49
1
ответ
Расширение ввода в Haskell Parsec
Я хочу реализовать парсер Parsec для простого языка, который допускает включение файлов. Т.е. язык выглядит так: include otherfile; expression in the language; Если включение анализируется, я хочу прочитать файл с этим именем и встроить его проанали…
13 апр '17 в 09:01
1
ответ
Haskell: синтаксический анализатор строк не распознает экранированную двойную кавычку
У меня есть этот парсер (упражнение из "Напиши Лисп" за 48 часов): import Text.ParserCombinators.Parsec import Control.Monad data LispVal = String String deriving Show parseString :: Parser LispVal parseString = do char '"' x <- many innerChar ch…
30 янв '16 в 14:19
1
ответ
Используйте Parsec, чтобы написать новую функцию "parse:: String -> Stm"
У меня есть курсовая работа, которая требует от меня написать новую функцию parse:: String -> Stm. В Parsec уже есть функция parse, поэтому я должен импортировать квалифицированный parsec, чтобы parse возвращал мою функцию-обертку. Функция-обертка д…
02 май '17 в 11:55
1
ответ
Парскек Хаскеля соответствует if (3) как будто (3 > 0)
Я использую Parsec и пример версии boolExpr http://hpaste.org/86299 на данный момент. Я собираю на Windows через GHC. Код выше будет соответствовать логическому выражению, как 3 < 4 или же a not 3 Однако это не будет соответствовать выражению, ка…
22 апр '13 в 06:03
2
ответа
Использование Parsec для разбора регулярных выражений
Я пытаюсь изучить Parsec с помощью небольшого парсера регулярных выражений. В BNF моя грамматика выглядит примерно так: EXP : EXP * | LIT EXP | LIT Я попытался реализовать это в Haskell как: expr = try star <|> try litE <|> lit litE = do…
26 янв '12 в 15:11
0
ответов
Как определить, использует ли Parsec парсер постоянное пространство кучи в Haskell?
В недавнем вопросе я спросил о следующем парсере парсек: manyLength :: forall s u m a. ParsecT s u m a -> ParsecT s u m Int manyLength p = go 0 where go :: Int -> ParsecT s u m Int go !i = (p *> go (i + 1)) <|> pure i Эта функция похо…
30 мар '17 в 13:25
1
ответ
Parsec зависает при использовании buildExpressionParser
Я пытаюсь создать базовый синтаксический анализатор для математических уравнений с использованием Parsec, и у меня возникли некоторые проблемы с использованием buildExpressionParser функция. Я создал parsecParse функция, но она просто навсегда завис…
12 авг '14 в 11:09
4
ответа
Как я могу встроить эту функцию?
У меня есть две функции, но одна из функций вызывается только из другой, поэтому я хотел бы включить вспомогательную функцию. Мой код выглядит так: data PoS = N | V | Adj | Adv | Phr posEntity :: Parser PoS posEntity = do pos <- string "N." <|…
20 июн '12 в 18:02
0
ответов
Как сохранить результат parsec в списке в Haskell?
Этот вопрос может показаться тривиальным, но я новичок в Haskell, и я прочитал некоторые уроки для parsec, но не могу понять, как сохранить результат от парсера в списке (или в моем случае в списке списка строк). Вот код парсера: -- Adapted from htt…
11 июн '15 в 19:26
2
ответа
Проблема с префиксным оператором Parke в Haskell
Я компилирую на Windows, используя GHC. Вот мой код ( также доступен здесь): module GMC.GMLParser (parseGML) where import Control.Applicative ((<$>), (<*>)) import Text.ParserCombinators.Parsec import Text.ParserCombinators.Parsec.Expr i…
24 апр '13 в 00:01
1
ответ
Оператор паролей в Haskell попытается выпустить
Я компилирую на Windows, используя GHC. Вот мой код для справки http://hpaste.org/86539 Проблема в том, что следующее выражение не анализируется:3+2 < 1+-4 <= -3 << 1, Это должно быть проанализировано как: .. однако я получаю неожиданное…
25 апр '13 в 05:43