我在我的parsec解析器中有一個愚蠢的情況,我希望得到您的幫助。解析parsec中單引號字符串中的單個字符char
我需要解析一系列由| |分隔的強/字符。字符。 所以,我們可以有一個| B | 'C' | 'ABCD'
應該變成
[a,b,c,abcd]
空間是不允許的,除非 '' 字符串內。現在,在我天真的嘗試中,我現在已經得到了可以將字符串解析爲[a'a,bb]而不是aa |'b'b'的字符串[aa,b'b] 。
singleQuotedChar :: Parser Char
singleQuotedChar = noneOf "'" <|> try (string "''" >> return '\'')
simpleLabel = do
whiteSpace haskelldef
lab <- many1 (noneOf "|")
return $ lab
quotedLabel = do
whiteSpace haskelldef
char '\''
lab <- many singleQuotedChar
char '\''
return $ lab
現在,我該如何告訴解析器考慮'停止',如果它後面跟着|或空白? (或者,得到一些'字符計入此)。輸入是用戶生成的,所以我不能依賴他們的字符。
您試圖解析''b'b'',但在'singleQuotedChar'中,您要求單引號只能成對出現。你是不是試圖把''b''b''解析爲'b'b'?如果你想讓''b'b''被解析,你需要改變singleQuotedChar的定義。 – rampion
解析器應該如何知道它應該保持在'aa|'b'b'中間?我正努力去理解你想要做的事情。它是否像包圍字符一樣,但僅在| |旁邊有效。爲什麼要這樣呢? (可能的答案:這是更大的輸入的一部分,其中空間意味着別的東西。) – AndrewC
下面是我認爲你的意思:字符串是一系列字母(或數字?),撇號和由撇號括起來的空格,或者一系列字母(數字)和撇號沒有用撇號括起來。字符串用垂直條插入。 – AndrewC