Parsec:解析具有相同定界符的列表列表

瑞安·肯尼迪(Ryan Kennedy)

考虑一种简单的语言,它是用空格分隔的命令的列表。每个命令均以单个字母作为命令名称,并使用一系列以空格分隔的数字作为其参数。例如,a 1 2 3 b 4 5 6 d 7 e f将代表以下命令:

  • 一个1 2 3
  • b 4 5 6
  • d 7
  • Ë
  • F

问题在于,它一直通过抓取项目sepBy,并到达另一个数字,但是到达“ b”时失败。

但是,通过下面的代码传递时,会产生以下错误:

Left "error" (line 1, column 5):
unexpected "b"
expecting space

现在,我意识到这很可能是由于我在查看问题时遇到的错误而引起的,并希望有人指出如何解析此类内容。


module Main where

import Control.Applicative hiding (many, optional, (<|>))
import Text.ParserCombinators.Parsec
import Numeric (readSigned, readFloat)

commands = command `sepBy` spaces

command = do
  l <- letter
  ns <- number `sepBy` spaces
  return (l, ns)

main :: IO ()
main = print $ show $ parse commands "error" "a 1 2 3 b 4 5 6 d 7 e f"

number :: CharParser () Double
number = do s <- getInput
            case readSigned readFloat s of
              [(n, s')] -> n <$ setInput s'
              _         -> empty
开支

尝试在每个非空格标记之后使用空格。例如

commands = many (command <* spaces)

command = do
  l <- letter
  spaces
  ns <- many (number <* spaces)
  return (l, ns)

或者

command = (,) <$> (letter <* spaces) <*> many (number <* spaces)

主要思想是:解析某些内容后,下一个字符应该是一个非空格,开始要解析的下一个项目。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

带有不同定界符的配对列表

来自分类Dev

如何仅解析具有不同定界符的一列?

来自分类Dev

具有多个定界符的分割列表

来自分类Dev

基于相同定界符的php字符串解析

来自分类Dev

javascript:将字符串拆分为具有不同定界符的数组

来自分类Dev

Bash-比较具有不同定界符的字符串的简便方法?

来自分类Dev

将具有不同定界符的列与不幸的分数结构拆分为2

来自分类Dev

两个相同或不同定界符之间的子字符串(当定界符出现多次时)

来自分类Dev

如何检查是否在列表列表具有相同的长度

来自分类Dev

当行多次具有相同的定界符时获取值

来自分类Dev

不同定界符的不同属性?

来自分类Dev

bash单词移动的不同定界符

来自分类Dev

具有4个定界符的TSQL解析字符串

来自分类Dev

具有元组的列表列表到列表列表

来自分类Dev

具有元组的列表列表到列表列表

来自分类Dev

Python根据定界符重塑字符串列表

来自分类Dev

用定界符对数组列表进行排序

来自分类Dev

将列表定界符更改为新内容

来自分类Dev

似乎没有定界符的字符串解析

来自分类Dev

没有标准定界符的CSV文件解析

来自分类Dev

如何解析没有定界符的元组?

来自分类Dev

解析带有多个定界符的字符串

来自分类Dev

如何解析没有定界符的元组?

来自分类Dev

如何使用一个或多个相同的定界符将numpy数组拆分为多个列表

来自分类Dev

如何使用一个或多个相同的定界符将numpy数组拆分为多个列表

来自分类Dev

如何使用一个或多个相同的定界符将numpy数组拆分为多个列表

来自分类Dev

如何使用一个或多个相同的定界符将numpy数组拆分为多个列表

来自分类Dev

创建具有多字符定界符的HIVE表

来自分类Dev

具有复杂定界符的Linux grep命令

Related 相关文章

  1. 1

    带有不同定界符的配对列表

  2. 2

    如何仅解析具有不同定界符的一列?

  3. 3

    具有多个定界符的分割列表

  4. 4

    基于相同定界符的php字符串解析

  5. 5

    javascript:将字符串拆分为具有不同定界符的数组

  6. 6

    Bash-比较具有不同定界符的字符串的简便方法?

  7. 7

    将具有不同定界符的列与不幸的分数结构拆分为2

  8. 8

    两个相同或不同定界符之间的子字符串(当定界符出现多次时)

  9. 9

    如何检查是否在列表列表具有相同的长度

  10. 10

    当行多次具有相同的定界符时获取值

  11. 11

    不同定界符的不同属性?

  12. 12

    bash单词移动的不同定界符

  13. 13

    具有4个定界符的TSQL解析字符串

  14. 14

    具有元组的列表列表到列表列表

  15. 15

    具有元组的列表列表到列表列表

  16. 16

    Python根据定界符重塑字符串列表

  17. 17

    用定界符对数组列表进行排序

  18. 18

    将列表定界符更改为新内容

  19. 19

    似乎没有定界符的字符串解析

  20. 20

    没有标准定界符的CSV文件解析

  21. 21

    如何解析没有定界符的元组?

  22. 22

    解析带有多个定界符的字符串

  23. 23

    如何解析没有定界符的元组?

  24. 24

    如何使用一个或多个相同的定界符将numpy数组拆分为多个列表

  25. 25

    如何使用一个或多个相同的定界符将numpy数组拆分为多个列表

  26. 26

    如何使用一个或多个相同的定界符将numpy数组拆分为多个列表

  27. 27

    如何使用一个或多个相同的定界符将numpy数组拆分为多个列表

  28. 28

    创建具有多字符定界符的HIVE表

  29. 29

    具有复杂定界符的Linux grep命令

热门标签

归档