Описание тега megaparsec

Megaparsec - это монадическая библиотека комбинатора синтаксического анализатора для Haskell с улучшенным сообщением об ошибках и анализом с учетом отступов.
1 ответ

Используйте Parsec, чтобы написать новую функцию "parse:: String -> Stm"

У меня есть курсовая работа, которая требует от меня написать новую функцию parse:: String -> Stm. В Parsec уже есть функция parse, поэтому я должен импортировать квалифицированный parsec, чтобы parse возвращал мою функцию-обертку. Функция-обертка д…
02 май '17 в 11:55
1 ответ

Приоритет оператора в мегапарсек

У меня проблемы с использованием Megaparsec 6 makeExprParser помощник. Я не могу понять, как связать оба бинарных ^ и одинарный - на уровнях предшествования я бы ожидал. Используя это makeExprParser синтаксический анализатор выражений: expressionPar…
31 авг '18 в 01:57
1 ответ

Левый и правый рекурсивный парсер

Это эволюция этого вопроса. Мне нужно разобрать с мегапарсек такую ​​структуру данных как data Foo = Simple String Dotted Foo String Paren String Foo и я хотел бы разобрать в нем строки вроде foo ::= alphanum | foo "." alphanum | alphanum "(" foo ")…
11 сен '18 в 07:01
1 ответ

Разбор с Haskell/Megaparsec: StateT для создания локальной, лексической области видимости?

Поэтому я пытаюсь выполнить стандартное упражнение "напиши себе синтаксический анализатор для языка, похожего на схему", чтобы выяснить преобразователи MegaParsec и монад. Следуя предложениям многих уроков и постов в блоге, я использую ReaderT а так…
1 ответ

Состояние с Megaparsec ParsecT не возвращается

У меня есть парсер, определенный как немного более сложная версия следующего: data X = X { getX :: State ([Int], [X]) Bool } type Parser = ParsecT Void String (State ([Int], [X])) Идея состоит в том, что я могу создать стек действий, которые я хочу …
2 ответа

Разрешение типа в Haskell: MegaParsec/ Парсинг одного пробела

Если я посмотрю на документацию для space предлагает использовать void spaceChar, Однако, если я действительно попробую: x :: Parser () x = void spaceChar я получил * Couldn't match type `Token s0' with `Char' arising from a use of `spaceChar' The t…
08 янв '18 в 15:21
0 ответов

Предложения автозаполнения от ошибки разбора

Я пишу парсер для собственного ядра Jupter, используя мегапарсек. Мне удалось повторно использовать синтаксический анализатор для предоставления дополнений: пользовательское сообщение об ошибке, сгенерированное из библиотеки мегапарсек, преобразуетс…
19 окт '17 в 12:05
1 ответ

Синтаксический анализ комментариев к блоку Megaparsec с использованием символов начала и конца

Я хочу проанализировать текст, похожий на этот в Haskell, используя Megaparsec. # START SKIP def foo(a,b): c = 2*a # Foo return a + b # END SKIP , где # START SKIP а также # END SKIP отмечает начало и конец блока текста для анализа. По сравнению с s…
13 ноя '16 в 23:58
0 ответов

Мегапарсек: расширение макроса при разборе

В небольшом DSL я разбираю определения макросов, аналогично #define Директивы препроцессора C (здесь упрощенный пример): _def mymacro(a,b) = a + b / a Когда следующий вызов встречается парсером c = mymacro(pow(10,2),3) он расширен до c = pow(10,2) +…
10 сен '16 в 14:14
2 ответа

Группировка строк с помощью Parsec

У меня есть строчный текстовый формат, с которым я хочу разобраться Parsec†. Строка либо начинается со знака решетки и задает пару значений ключа, разделенных двоеточием, либо является URL-адресом, который описан предыдущими тегами. Вот короткий при…
18 июн '16 в 12:18
2 ответа

Как далеко "пробует" задний ход?

Итак... Я испортил запись в формате CSV: 23,95489,0,20,9888 Из-за языковых настроек числа с плавающей точкой записывались с запятыми в качестве разделителя... в файле значений, разделенных запятыми... Проблема в том, что файл не имеет хорошего форма…
23 июл '18 в 16:26
1 ответ

Разбор выражений внутри арифметических выражений

Я хотел бы разобрать арифметические выражения. Вот мой текущий парсер: data AExpr = ExprAsAExpr Expr | IntConst Integer | Neg AExpr | ABinary ABinOp AExpr AExpr deriving (Show, Eq) aExpr :: Parser AExpr aExpr = makeExprParser aTerm aOperators aTerm …
0 ответов

Распространение ошибок (мега) парсек через продолжения

У меня есть несколько технический вопрос о внутренней работе (Мега) Парсек, неформальный контекст которого: Какова идея, управляющая накоплением / распространением сообщений об ошибках через продолжения в Parsec? В частности: рассмотрим mplus выполн…
16 апр '18 в 15:28
1 ответ

Отступы с использованием мегапарсек

Я хотел бы проанализировать базовый язык с отступами, используя Megaparsec. Первоначально я использовал Parsec, который мне удалось правильно настроить с отступом, но теперь у меня возникли некоторые проблемы. Я следовал этому уроку, и вот код, кото…
15 янв '18 в 21:57
1 ответ

Можно ли принудительно отозвать все варианты?

Мне нужно разобрать этот синтаксис для объявления функции foo x = 1 Func "foo" (Ident "x") = 1 foo (x = 1) = 1 Func "foo" (Label "x" 1) = 1 foo x = y = 1 Func "foo" (Ident "x") = (Label "y" 1) Я написал этот парсер module SimpleParser where import T…
30 май '16 в 12:24
1 ответ

Haskell Megaparsec - зарезервированное слово, проанализированное как идентификатор

Я пытаюсь разобрать простой язык с выражениями lamdba. Но runParser expr "lamdbda(x) (return x) возвращается Right (Var "lamdba") вместо Right (Lambda ["x"] (Return (Var "x"))) Я думаю, что я должен добавить try где-то, но я не могу понять, где. lam…
10 ноя '18 в 12:47
0 ответов

Мегапарсек: нет экземпляра для (ErrorComponent Void), возникающего из оператора do

Я пытаюсь написать простой парсер с мегапарсек и имеет следующую проблему: type MyParser = Parsec Void String xxx :: MyParser Int xxx = do satisfy (`notElem` "!>") return 1 gbgc :: MyParser [Int] gbgc = many (yyy <|> xxx) Я получаю сообщени…
13 дек '17 в 12:23
1 ответ

Разбор кавычек с помощью Haskell

Требования взяты из спецификации языка DOT, точнее я пытаюсь разобрать [ID] атрибут, который может быть, например, любая строка в двойных кавычках ("..."), возможно, содержащая экранированные кавычки (\")1; Следующее должно быть минимальным примером…
13 сен '18 в 18:31
1 ответ

Несколько ошибок с разными позициями с использованием мегапарсек

Я собираюсь использовать мегапарсек для разбора языка программирования для университетского проекта. Тем не менее, я искал способ сообщить о нескольких ошибках. Я знаю о withRecovery, и я видел эту проблему, но я не нашел о случае, когда ошибки прои…
23 сен '16 в 18:43
2 ответа

Как использовать комбинаторы мегапарсек на StateT

Я строю компилятор для Java для университетского проекта, в моем проекте мои парсеры в основном StateT (Scope,SymbolTable) String m a где Scope это область, в которой мы находимся сейчас (метод, класс и т. д.) и SymbolTable содержит символы, определ…
29 май '17 в 15:38