Вопросы по теме 'parsec'

Сигнатура типа функции Parsec parse и класса Stream
Что означает ограничение (Stream s Identity t) в следующем объявлении типа? parse :: (Stream s Identity t) => Parsec s () a -> SourceName -> s -> Either ParseError a Что означает Stream в следующем объявлении класса, что это...
1613 просмотров
schedule 07.10.2021

Разбор векторов схем в haskell с использованием массивов
Я пытаюсь выполнить руководство по написанию схемы за 48 часов, и, как новичку в haskell, это довольно сложно. В настоящее время я работаю над проблемой, в которой я должен добавить возможность синтаксического анализа векторов схемы (раздел 3.4,...
336 просмотров
schedule 26.10.2021

Парсер Haskell Parsec для встреч []
Я пытаюсь написать парсер на Haskell, используя Parsec. В настоящее время у меня есть программа, которая может разбирать test x [1,2,3] end Код, который это делает, выглядит следующим образом testParser = do { reserved "test"; v...
411 просмотров
schedule 27.09.2021

Продолжение lex после обнаружения ошибки
Я прохожу курс компиляторов в моем университете. Я предпочитаю делать проект с использованием Haskell + Parsec. Лексер и синтаксический анализатор должны быть отдельными. Я использую Parsec для преобразования строки в список токенов, который затем...
157 просмотров
schedule 18.09.2021

Как я могу превратить этот синтаксический анализатор в аппликативный поливариадный?
Я пытаюсь разобрать такие даты, как 09/10/2015 17:20:52 : {-# LANGUAGE FlexibleContexts #-} import Text.Parsec import Text.Parsec.String import Text.Read import Control.Applicative hiding (many, (<|>)) data Day = Day { mo :: Int , dy...
140 просмотров

Расширение ввода в Haskell Parsec
Я хочу реализовать парсер Parsec для простого языка, который позволяет включать файлы. То есть язык выглядит так: include otherfile; expression in the language; Если включение анализируется, я хочу прочитать файл с этим именем и встроить...
119 просмотров
schedule 26.10.2021

Почему runParsecT дважды требует начального состояния пользователя?
Я определил следующий настраиваемый парсер: newtype St = St Int type TxsParser = ParsecT String St (State St) Теперь, чтобы запустить этот парсер, я должен использовать _ 2_ . runParserT :: Stream s m t => ParsecT s u m a...
101 просмотров
schedule 01.12.2021

Как получить комментарии с помощью Megaparsec?
Я печатаю AST, чтобы отформатировать исходный файл, из которого AST создается с использованием Megaparsec. Комментарии отсутствуют в AST, но я намерен сохранить их после переформатирования. Есть ли способ в Megaparsec получить все комментарии (как...
45 просмотров

Парсек не потребляет весь ввод?
Я пишу код для разбора команд простого императивного языка, определенного в Theory of Programming Languages (Reynolds, 1998). У меня есть модуль лексера, который по заданной строке извлекает из нее токены, если это допустимое языковое выражение,...
410 просмотров
schedule 27.02.2022

Производительность uu-parsinglib по сравнению с попыткой в ​​Parsec
Вопрос Я знаю Parsec и uu-parsinglib , и я писал синтаксические анализаторы для них обоих. Недавно я обнаружил, что в uu-parsinglib есть проблема, которая может существенно повлиять на его работу, и я не вижу пути ее решения. Рассмотрим...
858 просмотров

Разбор леворекурсивной грамматики в бесконечной рекурсии суммирующего типа
Я пытаюсь написать парсер для языка Tiger из современной реализации компилятора на ML и застрял на одном из рекурсивных типов. У меня есть следующий тип data LValue =...
730 просмотров
schedule 17.04.2022

Почему я получаю неожиданный конец ввода, когда мой синтаксический анализатор явно ищет его?
import Control.Applicative hiding (many) import Text.Parsec import Text.Parsec.String lexeme :: Parser a -> Parser a lexeme p = many (oneOf " \n\r") *> p identifier :: Parser String identifier = lexeme $ many1 $ oneOf (['a'..'z'] ++...
471 просмотров
schedule 24.04.2022

Почему не удается разобрать строку с минусом?
Почему это не удается? data Value = Num Integer | Str String let numberOrString = (liftM Num (try int) <|> liftM Str (many1 (noneOf " ")) parse (numberOrString >> space) "" "123-4 " >> space является...
515 просмотров
schedule 07.05.2022

Parsec: захват необработанного исходного кода после разбора
У меня странная прихоть. Предположим, у меня есть что-то вроде этого: data Statement = StatementType Stuff Source Теперь я хочу разобрать такой оператор, разобрать весь материал, а после этого я хочу поместить все символы, которые я...
65 просмотров
schedule 09.05.2022

Разделитель/терминатор парсеков
Видимо, я слишком тупой, чтобы понять это... Рассмотрим следующую строку: foobar(123, 456, 789) Я пытаюсь понять, как это разобрать. Особенно, call = do cs <- many1 letter char '(' as <- many argument return (cs, as)...
206 просмотров
schedule 09.05.2022

Я не понимаю, как использовать функцию лексемы
С 1_: lexeme p = do { x <- p; whiteSpace; return x } Похоже, что лексема берет синтаксический анализатор p и предоставляет синтаксический анализатор, который имеет то же поведение, что и p, за исключением того, что он также пропускает все...
721 просмотров

Как использовать парсеры от Aeson с IO
У меня есть типы данных со многими полями, которые, если они не указаны вручную в файле конфигурации JSON, должны быть установлены случайным образом. Я использую Aeson для анализа файла конфигурации. Как лучше всего это сделать? В настоящее время...
477 просмотров
schedule 11.06.2022

Числа с плавающей запятой, точность и парсек
Рассмотрим следующий код: import Text.Parsec import Text.Parsec.Language import Text.Parsec.String import qualified Text.Parsec.Token as Token float :: Parser Double float = Token.float (Token.makeTokenParser emptyDef) myTest :: String ->...
742 просмотров
schedule 17.06.2022

Parsec: элегантный способ потреблять и сохранять входные данные
Я работаю в небольшой веб-хостинговой компании и решил написать скрипт для сортировки нашего довольно большого файла конфигурации зоны named/bind9. Я в некоторой степени доволен тем, как это получилось (по крайней мере, это работает), но меня немного...
301 просмотров
schedule 11.07.2022

Создание комбинатора парсера типа Parser a -> Parser b -> Parser (либо a b)
Я хочу проанализировать некоторый текст, в котором определенные поля большую часть времени имеют структуру, но иногда (из-за специального регистра, опечаток и т. д.) эта структура отсутствует. Например. Обычный регистр — Cost: 5 , но иногда он...
127 просмотров
schedule 30.07.2022