Ich versuche zu unterscheiden zwischen Ints und Floats in einem Parser. Ich habe 2 Parser für jeden Int und Float. Allerdings habe ich Schwierigkeiten, auf einem '.' Zu scheitern. Ich suchte nach Negieren und sah nach vorne und schien nicht zu bekommen und Früchte.Parsec, wenn eine Übereinstimmung gefunden wird, dann Fehler werfen
Ich hoffe, dass ich keine Fragen duplizieren.
Ich hatte es mit der Suche nach dem nächsten Zeichen, das kein '.' aber das ist eine hässliche Lösung.
BEARBEITEN: Zusätzlicher Code hinzugefügt.
--Int--------------------------------------------------------------------
findInt :: Parser String
findInt = plus <|> minus <|> number
number :: Parser String
number = many1 digit
plus :: Parser String
plus = char '+' *> number
minus :: Parser String
minus = char '-' <:> number
makeInt :: Parser Int
makeInt = prepareResult (findInt <* many (noneOf ".") <* endOfLine)
where readInt = read :: String -> Int
prepareResult = liftA readInt
makeInt2 :: Parser Int
makeInt2 = do
numberFound <- (findInt <* many (noneOf ".") <* endOfLine)
match <- char '.'
return (prepareResult numberFound)
where readInt = read :: String -> Int
prepareResult = readInt
--End Int----------------------------------------------------------------
Wie sieht 'findInt' aus (hilft nur etwas zu arbeiten)? – Alec
Hinzugefügt. Tut mir leid, ich habe nicht nachgedacht, als ich den Code aufgesetzt habe. –