質問

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 ることは必ずしも当てはまりませんかトークンの型です。れのインスタンス ShowEq, な想像できますトークンの種類ごとの表示その他の方法によ show, は、会員のクラスにトークンがきによって実現する新しい何らかの方法以外の ==elem.

最後に、トークンの型がなくなっ Char, かを選択した表示位置が更新され、依存度の高い自の表現をトークンがとれている。

そのため、いまま出入り可能で、より一般化された形で使いになれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top