murder-1.3.2: examples/LangDef.hs
{-# OPTIONS -fcontext-stack=100 #-}
{-# LANGUAGE Arrows, DoRec #-}
module LangDef where
import qualified Data.Set as Set
import Control.Arrow
import Language.Grammars.Murder
import Language.Grammars.Grammar
import Language.Grammars.Grammar.AspectAG
import Language.Grammars.Murder.Scanner
import LangSem
import Utils
import Control.Applicative
import Data.HList
import UU.Pretty.Basic
prds = proc () -> do
rec root <- addNT -< (iI semAGItf exp Ii)
exp <- addNT -< (iI semLet "let" var "=" exp "in" exp Ii)
<|>
(iI semAdd exp "+" term Ii)
<|>
iI term Ii
term <- addNT -< (iI semMul term "*" factor Ii)
<|>
iI factor Ii
factor <- addNT -< (iI semCst int Ii)
<|>
(iI semVar var Ii)
exportNTs -< exportList root $ export ntExp exp
. export ntTerm term
. export ntFactor factor
{-
gramOpts :: ScanOpts
gramOpts
= defaultScanOpts
{ scoKeywordsTxt = Set.fromList ["let", "in"]
, scoSpecChars = Set.fromList "=+*"
, scoDollarIdent = True
}
-}