parsec

    1熱度

    1回答

    只是一個簡單的問題,我無法解決。 我想將一個字符串解析爲一個String或一個Maybe Double,其中一個空字符串或一個「n/a」被解析爲Nothing。例如類似: data Value = S String | N (Maybe Double) value::CharParser() Value value = val <* spaces where val = N <$>

    0熱度

    1回答

    我目前正在編寫一個簡單的編程語言的解析器。它到達那裏,但我無法解析布爾邏輯語句,如「i == 0 AND j == 0」。所有我回來的是「非窮舉模式的情況下」 當我自己解析一個布爾表達式它可以很好地工作,例如, 「我== 0」。注意「i == 0 a」也會返回一個布爾語句,但「i == 0 AND」不返回任何內容。 任何人都可以幫忙嗎? 雖然上述作品正確輸入,如運行parseBoolean「我==

    4熱度

    1回答

    我一直在嘗試使用buildExpressionParser來解析一種語言,而且我幾乎擁有它。感謝Parsec.Expr repeated Prefix/Postfix operator not supported解決了我的一個重大問題。 這段代碼說明(我希望是)我最後的困難: import Text.Parsec.Expr import Text.Parsec data Expr = Lit

    1熱度

    2回答

    我正在使用一個Parsec分析器來處理一個有點複雜的數據文件格式(我無法控制這種格式)。 我已經取得了很多進展,但我目前堅持以下幾點。 我需要能夠在一定程度上解析這樣一行: 4 0.123 1.452 0.667 * 3.460 149 - - 語義上4是NODENUM,該Floats和*爲負對數概率(因此,*代表的負對數概率爲零)。 149和減號是真的垃圾,我可以放棄,但我至少需要確保它們不

    1熱度

    1回答

    我不確定如何使用setPosition(Parsec庫)。這是一段非常簡單的代碼,它應該讀取文本第二行的前3個字符。 import Text.ParserCombinators.Parsec content = ["This is the first line", "and this is the second one", "not to talk about th

    7熱度

    1回答

    我想編寫一套Parsec解析器的測試。這裏有一個解析器的一個簡單的例子,我想快速檢查測試: identifier = do c <- letter cs <- many (alphaNum <|> oneOf identSymbols) skipSpaces return $ Ident $ c:cs 所以,理想情況下,我想快速檢查,以產生有效的標識符,

    2熱度

    1回答

    我從Text.Parsec.Expr的文檔中獲得了一個示例。 expr = buildExpressionParser table term <?> "expression" term = parens expr <|> natural <?> "simple expression" table = [ [prefix "-" negate, prefix

    4熱度

    4回答

    我有兩個函數,但其​​中一個函數只能從另一個函數中調用,所以我想內聯輔助函數。我的代碼如下所示: data PoS = N | V | Adj | Adv | Phr posEntity :: Parser PoS posEntity = do pos <- string "N." <|> string "V." <|> string "Adj."

    2熱度

    3回答

    如何翻譯這個Haskell代碼: import Text.ParserCombinators.Parsec((<|>), unexpected, lookAhead, noneOf, char) import Control.Monad(when) data BracketElement = BEChar Char | BEChars String | BEColl String | BEE

    6熱度

    1回答

    我試圖用Parsec在Haskell中編寫解析器。目前,我有一個程序,可以解析 test x [1,2,3] end ,這是否給出如下 testParser = do { reserved "test"; v <- identifier; symbol "["; l <- sepBy natural commaSep; symbol "]";