{-# 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 } -}