私は parsec Haskell ライブラリを使用しています。
次の種類の文字列を解析したい:
[[v1]][[v2]]
xyz[[v1]][[v2]]
[[v1]]xyz[[v2]]
等
値 v1 と v2 のみを収集し、これらをデータ構造に格納するのは興味深いことです。
次のコードで試しました:
import Text.ParserCombinators.Parsec
quantifiedVars = sepEndBy var (string "]]")
var = between (string "[[") (string "") (many (noneOf "]]"))
parseSL :: String -> Either ParseError [String]
parseSL input = parse quantifiedVars "(unknown)" input
main = do {
c <- getContents;
case parse quantifiedVars "(stdin)" c of {
Left e -> do { putStrLn "Error parsing input:"; print e; };
Right r -> do{ putStrLn "ok"; mapM_ print r; };
}
}
このようにして、入力が"[[v1]][[v2]]"
プログラムである場合は正常に動作し、次の出力が返されます。
"v1"
"v2"
入力が"xyz[[v1]][[v2]]"
の場合、プログラムは動作しません。特に、 を[[...]]
無視して、 に含まれるものだけが必要です"xyz"
。
[[...]]
また、コンテンツをデータ構造に保存したいと考えています。
この問題をどのように解決しますか?