parsec-3.1.0とカスタムのトークンdatatype
質問
parsec-3.1.0( http://hackage.haskell.org/package/parsec-3.1.0 ) 全てのトークンの型です。しかし、combinatorsのようにします。Parsec.文字に置き換わります。を満たすことだけに定義されたCharデータ型.あるという事はより一般的な相手可能です。
う定義を自分のバージョンかも?????
かなり異なるパーサの図書館ウです:
- カスタムのトークンの種類
- カスタムパーサの状態で解析ステートフルフォーマッWavefrontのOBJ)
解決
一般化バージョン oneOf
, noneOf
, は、 anyChar
できる建物を一般化 satisfy
, 簡単に十分:
oneOfT :: (Eq t, Show t, Stream s m t) => [t] -> ParsecT s u m t
oneOfT ts = satisfyT (`elem` ts)
noneOfT :: (Eq t, Show t, Stream s m t) => [t] -> ParsecT s u m t
noneOfT ts = satisfyT (not . (`elem` ts))
anyT :: (Show t, Stream s m t) => ParsecT s u m t
anyT = satisfyT (const True)
satisfyT :: (Show t, Stream s m t) => (t -> Bool) -> ParsecT s u m t
satisfyT p = tokenPrim showTok nextPos testTok
where
showTok t = show t
testTok t = if p t then Just t else Nothing
nextPos p t s = -- however you update position for your token stream
いという見方もあるかもしれないが、一般化されるよう、がんの告知られ、一概にこうした想定のタイプ t
ることは必ずしも当てはまりませんかトークンの型です。れのインスタンス Show
や Eq
, な想像できますトークンの種類ごとの表示その他の方法によ show
, は、会員のクラスにトークンがきによって実現する新しい何らかの方法以外の ==
や elem
.
最後に、トークンの型がなくなっ Char
, かを選択した表示位置が更新され、依存度の高い自の表現をトークンがとれている。
そのため、いまま出入り可能で、より一般化された形で使いになれません。
所属していません StackOverflow