packages feed

peggy-0.2.0: bootstrup/Bootstrup.hs

{-# Language TemplateHaskell, QuasiQuotes, FlexibleContexts #-}

import Data.Char
import Numeric
import Language.Haskell.TH
import Language.Haskell.Meta.Utils

import qualified Stage2

import Text.Peggy.Prim
import Text.Peggy.Quote
import Text.Peggy.CodeGen.TH
import Text.Peggy.Syntax
import Text.Peggy.SrcLoc

header :: String
header =
  unlines
  [ "{-# Language RankNTypes #-}"
  , "{-# Language FlexibleContexts #-}"
  , "module Text.Peggy.Parser (syntax) where"
  , "import Control.Applicative"
  , "import Data.ListLike.Base hiding (head)"
  , "import Data.HashTable.ST.Basic"
  , "import Numeric"
  , "import Data.Char"
  , "import Text.Peggy.Prim"
  , "import Text.Peggy.Syntax"
  ]

main :: IO ()
main = do
  res <- parseFile Stage2.syntax "peggy.peggy"
  case res of
    Left err -> error $ show err
    Right defs -> do
      code <- runQ $ genDecs defs
      putStrLn header
      putStrLn $ pp code