相关疑难解决方法(0)

你如何以贪婪的方式使用parsec?

在我的工作中,我遇到了很多粗糙的SQL,我有一个明智的想法,即编写一个程序来解析sql并将其打印出来.我很快就完成了大部分工作,但我遇到了一个我不知道如何解决的问题.

所以让我们假装sql是"从1中选择foo".我的想法是总是有一个关键字后跟数据,所以我要做的就是解析一个关键字,然后在下一个关键字之前捕获所有乱码并存储以供以后清理,如果值得的话.这是代码:

import Text.Parsec
import Text.Parsec.Combinator
import Text.Parsec.Char
import Data.Text (strip)

newtype Statement = Statement [Atom]
data Atom = Branch String [Atom] | Leaf String deriving Show

trim str = reverse $ trim' (reverse $ trim' str)
  where
    trim' (' ':xs) = trim' xs
    trim' str = str

printStatement atoms = mapM_ printAtom atoms
printAtom atom = loop 0 atom 
  where
    loop depth (Leaf str) = putStrLn $ (replicate depth ' ') ++ str
    loop depth (Branch str atoms) = …
Run Code Online (Sandbox Code Playgroud)

parsing haskell

9
推荐指数
1
解决办法
2100
查看次数

标签 统计

haskell ×1

parsing ×1