Add homework 3 solution for CS325
This commit is contained in:
@@ -8,7 +8,7 @@ import Text.Parsec.Combinator
|
||||
type Parser a b = Parsec String a b
|
||||
|
||||
kw :: String -> Parser a ()
|
||||
kw s = string s $> ()
|
||||
kw s = try $ string s <* spaces $> ()
|
||||
|
||||
kwIf :: Parser a ()
|
||||
kwIf = kw "if"
|
||||
@@ -19,6 +19,12 @@ kwThen = kw "then"
|
||||
kwElse :: Parser a ()
|
||||
kwElse = kw "else"
|
||||
|
||||
kwElsif :: Parser a ()
|
||||
kwElsif = kw "elsif"
|
||||
|
||||
kwWhile :: Parser a ()
|
||||
kwWhile = kw "while"
|
||||
|
||||
kwState :: Parser a ()
|
||||
kwState = kw "state"
|
||||
|
||||
@@ -31,6 +37,21 @@ kwCombine = kw "combine"
|
||||
kwRand :: Parser a ()
|
||||
kwRand = kw "rand"
|
||||
|
||||
kwFunction :: Parser a ()
|
||||
kwFunction = kw "function"
|
||||
|
||||
kwSorted :: Parser a ()
|
||||
kwSorted = kw "sorted"
|
||||
|
||||
kwLet :: Parser a ()
|
||||
kwLet = kw "let"
|
||||
|
||||
kwTraverser :: Parser a ()
|
||||
kwTraverser = kw "traverser"
|
||||
|
||||
kwReturn :: Parser a ()
|
||||
kwReturn = kw "return"
|
||||
|
||||
op :: String -> op -> Parser a op
|
||||
op s o = string s $> o
|
||||
|
||||
@@ -47,6 +68,9 @@ var reserved =
|
||||
then fail "Can't use reserved keyword as identifier"
|
||||
else return name
|
||||
|
||||
list :: Char -> Char -> Char -> Parser a b -> Parser a [b]
|
||||
list co cc cd pe = surround co cc $ sepBy pe (char cd >> spaces)
|
||||
|
||||
surround :: Char -> Char -> Parser a b -> Parser a b
|
||||
surround c1 c2 pe =
|
||||
do
|
||||
|
||||
Reference in New Issue
Block a user