Вопросы по теме '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 просмотров
schedule
15.09.2021
Расширение ввода в 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 просмотров
schedule
07.09.2021
Парсек не потребляет весь ввод?
Я пишу код для разбора команд простого императивного языка, определенного в Theory of Programming Languages (Reynolds, 1998).
У меня есть модуль лексера, который по заданной строке извлекает из нее токены, если это допустимое языковое выражение,...
410 просмотров
schedule
27.02.2022
Производительность uu-parsinglib по сравнению с попыткой в Parsec
Вопрос
Я знаю Parsec и uu-parsinglib , и я писал синтаксические анализаторы для них обоих. Недавно я обнаружил, что в uu-parsinglib есть проблема, которая может существенно повлиять на его работу, и я не вижу пути ее решения.
Рассмотрим...
858 просмотров
schedule
07.04.2022
Разбор леворекурсивной грамматики в бесконечной рекурсии суммирующего типа
Я пытаюсь написать парсер для языка 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 просмотров
schedule
12.06.2022
Как использовать парсеры от 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