次のように数値をパースして返す関数を書いていたら
"100hoge"の様に先頭だけ数値の場合でもパースして結果を返します
100 * 200 の様に演算子を使うようになる頃には
これを解決しないと先に進めなくなったので
きちんと解決したいと思っています
お力を貸していただければ幸いです
import Numeric
import Control.Monad
import Text.ParserCombinators.Parsec
data RVal = RArray [RVal]
| RNumber Double
| RBool Bool
| RString String
| RRegExp String [Char]
deriving(Show)
-- 数値
p_numeric :: Parser RVal
p_numeric = try p_double <|> p_int
where
p_int = liftM (RNumber . read) $ many1 digit
p_double = do a <- many1 digit
c <- char '.'
b <- many1 digit
return $ (RNumber . read) (a++[c]++b)
-- 入力1
-- parseTest "100" p_numeric
-- 出力1
-- RNumber 100.0
--
-- 入力2
-- parseTest "100hoge" p_numeric
-- 出力2
-- RNumber 100.0
コメント(0件)