人気ブログランキング |

Text.Parsec.Prim: token

Text.Parsec.Prim には、字句解析の終わったトークンのリスト [(SourcePos, Token)] をパースするパーサを作る token コンビネータが定義されている。解読できないことはないが、Parsec の構文解析は字句解析も含まれているのであまり使う機会がないかもしれないので、用例のプログラムを紹介するだけにする(説明する気力がない)。ソースコードは次のようになる。

ファイル名:token.hs

{-# LANGUAGE FlexibleContexts #-}

module Main where

import Text.Parsec
import Text.Parsec.Prim
import Text.Parsec.Pos
import Data.Functor.Identity

mytoken :: (Stream [(SourcePos,String)] Identity (SourcePos,String)) => String -> Parsec [(SourcePos,String)] u String
mytoken x
..= token showTok posFromTok testTok
..where
....showTok (pos,t) = show t
....posFromTok (pos,t) = pos
....testTok (pos,t) = if x == t then Just t else Nothing

pos0 = initialPos "SourceName"
pos1 = incSourceColumn pos0 1
pos2 = incSourceColumn pos1 1

input = [(pos0,"foo"),(pos1,"bar"),(pos2,"baz")]

foo = mytoken "foo"

main = parseTest foo input

by tnomura9 | 2019-08-14 22:11 | Haskell | Comments(0)
<< Text.Parsec モジュ... Text.Parsec.Pri... >>