haskellでパーサーを書いていて問題に出くわしました

次のように数値をパースして返す関数を書いていたら
"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

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/04/30 22:20:18
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答0件)

回答はまだありません

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません