packages feed

peggy-0.1.2: Main.hs

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

module Main (main) where

import Text.Peggy

genParser [("qqexpr", "top")] [peggy|
-- Simple Arithmetic Expression Parser

top :: Double = expr !.

expr :: Double
  = expr "+" fact { $1 + $2 }
  / expr "-" fact { $1 - $2 }
  / fact

fact :: Double
  = fact "*" term { $1 * $2 }
  / fact "/" term { $1 / $2 }
  / term

term :: Double
  = "(" expr ")"
  / number

number ::: Double
  = [1-9] [0-9]* { read ($1 : $2) }
|]

main :: IO ()
main = print . parse top (SrcPos "<stdin>" 0 1 1) =<< getContents