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

Пользовательский ADT и дерево для возвращаемого значения синтаксического анализатора
Я использую Parsec для создания простого синтаксического анализатора Lisp. Каковы (не)преимущества использования пользовательского ADT для типов анализаторов по сравнению с использованием стандартного дерева (т. е. Data.Tree )? Попробовав оба...
431 просмотров
schedule 23.09.2023

Использование Parsec для записи экземпляра Read
Используя Parsec, я могу относительно легко написать функцию типа String -> Maybe MyType . Теперь я хотел бы создать экземпляр Read для моего типа на основе этого; однако я не понимаю, как работает readsPrec и что он должен делать. Мое...
617 просмотров
schedule 05.02.2024

Haskell: переход через строковый/текстовый файл
Я пытаюсь прочитать файл сценария, затем обработать и вывести его в файл html. В моем файле сценария всякий раз, когда есть @title(это заголовок) , я добавляю тег [header] это заголовок [/header] в свой html выход. Итак, мой подход заключается в...
571 просмотров
schedule 03.01.2023

Парсек зависает при вводе файла
Я пытаюсь написать синтаксический анализатор для файла конфигурации, и я получаю странную ошибку, когда синтаксический анализатор просто зависает. Код можно увидеть здесь . Я запустил его в отладчике, и, похоже, это происходит в строке...
193 просмотров
schedule 24.08.2023

Почему Parsec не использует операторы Control.Applicative
Использование Control.Applicative очень полезно с Parsec, но вам нужно всегда скрывать <|> и подобные объекты, поскольку они конфликтуют с собственными объектами Parsec: import Control.Applicative hiding ((<|>), many, optional)...
734 просмотров
schedule 22.03.2024

Использование Parsec с ограничениями на анализируемый результат
Я пытаюсь придумать умный способ разбора ассемблерного кода. Например, если регистры пронумерованы от 0 до 31, я хочу принять $31 , но не $32 . Я хотел бы сделать это, пока я разбираю исходный код, потому что 1) я хочу использовать информацию о...
161 просмотров
schedule 09.05.2022

Парсер перестановок Parsec с разделителями
Я хочу разобрать программы на ассемблере. У меня фиксированный формат разбора адреса сборки: [ register + offset + label ] Я реализовал парсеры для регистров, смещений и меток. Теперь я хочу создать парсер, который анализирует весь адрес....
362 просмотров
schedule 05.03.2024

Как выполнить неоднозначный анализ sepBy с помощью Parsec?
Я пытаюсь разделить строку с помощью разделителя, состоящего из нескольких символов, но проблема в том, что каждый из этих символов может встречаться сам по себе в строке без разделителей. Например, у меня есть foo*X*bar*X*baz , где разделителем...
932 просмотров
schedule 22.04.2022

Разбор функционального приложения с помощью Parsec
Я пытаюсь разобрать следующие выражения, используя parsec: f a b c => (Appl (Appl (Appl f a) b) c) Я попытался использовать что-то вроде: appl :: Parser Expr appl = do f <- expr gs <- many expr return $ foldr (\x y...
346 просмотров
schedule 03.10.2022

Тонкости вывода типов
У меня возникли некоторые трудности с пониманием того, почему сигнатура предполагаемого типа отличается от того, что я ожидал. Приведем пример (я старался сделать его как можно короче): import Control.Applicative import Data.Word import...
106 просмотров
schedule 28.05.2024

Парсек игнорирует все, кроме одного фрагмента
Мне нужно проанализировать один тег select в плохо сформированном HTML-документе (поэтому синтаксические анализаторы на основе XML не работают). Я думаю, что знаю, как использовать parsec для разбора тега select, как только я доберусь туда, но как...
313 просмотров
schedule 25.09.2023

Parsec.Expr повторяет префикс с другим приоритетом
В документации для Parsec.Expr.buildExpressionParser говорится: Префиксные и постфиксные операторы с одинаковым приоритетом могут встречаться только один раз (т. е. --2 не допускается, если - является отрицанием префикса). Однако я хотел...
536 просмотров
schedule 02.04.2022

Haskell Parsec анализирует фрагменты строки для сопоставления значений
Я пытаюсь разобрать строку, например AA{A}{END}} с данной картой: fromList [("{",43),("}",44),("{END}",255),("A",65)] , так что желаемый результат: [65,65,43,65,44,255,44] Это похоже на поиск самого длинного префикса в карте на...
282 просмотров
schedule 20.02.2024

Парсер, который сохраняет комментарии и восстанавливается после ошибки
Я работаю над графическим редактором для правильного формата конфигурации. По сути, редактор будет анализировать файл конфигурации, отображать свойства объекта, чтобы пользователи могли редактировать его из графического интерфейса, а затем записывать...
115 просмотров
schedule 18.11.2023

Преобразование \ в использование Haskell/Parsec
Я просматриваю учебник по Напишите себе схему и есть упражнение, которое я не могу решить . Наши строки не совсем совместимы с R5RS, потому что они не поддерживают экранирование внутренних кавычек внутри строки. Измените parseString так,...
226 просмотров
schedule 22.04.2024

Парсек отрицательное совпадение
parseIdent :: Parser (String) parseIdent = do x <- lookAhead $ try $ many1 (choice [alphaNum]) void $ optional endOfLine <|> eof case x of "macro" -> fail "illegal" _ -> pure x Я пытаюсь проанализировать...
185 просмотров
schedule 24.07.2022

Haskell Parsec — оптимизация парсинга int
Я использую import Text.Parsec.Text и import Text.Parsec.Char для анализа некоторых данных, содержащих целые числа. Я использую следующий код для анализа целых чисел. p_int :: Parser Int p_int = read <$> ((++) <$> option ""...
121 просмотров
schedule 12.05.2024