diff --git a/LexRain.x b/LexRain.x index b463033..cc4a8d5 100644 --- a/LexRain.x +++ b/LexRain.x @@ -33,8 +33,8 @@ $hexDigit = [0-9 a-f A-F] @reserved = "[" | "]" | "(" | ")" | "{" | "}" | ":" | "==" | "," | ";" - | "?" | "!" | "=" | "+=" | "-=" | "*=" | "/=" - | "+" | "-" | "*" | "/" + | "?" | "!" | "=" | "+=" | "-=" | "*=" | "/=" | "%=" + | "+" | "-" | "*" | "/" | "%" | ">=" | "<=" | "<" | ">" | "process" | "pareach" | "seqeach" | "par" | "seq" diff --git a/RainParse.hs b/RainParse.hs index 6a6e4be..74b68e4 100644 --- a/RainParse.hs +++ b/RainParse.hs @@ -92,6 +92,7 @@ dyadicArithOp <|> do {m <- reserved "-" ; return (m,A.Minus) } <|> do {m <- reserved "*" ; return (m,A.Times) } <|> do {m <- reserved "/" ; return (m,A.Div) } + <|> do {m <- reserved "%" ; return (m,A.Rem) } dyadicCompOp :: RainParser (Meta,A.DyadicOp) dyadicCompOp @@ -256,6 +257,9 @@ assignOp :: RainParser (Meta, Maybe A.DyadicOp) assignOp = do {m <- reserved "+=" ; return (m,Just A.Plus)} <|> do {m <- reserved "-=" ; return (m,Just A.Minus)} + <|> do {m <- reserved "*=" ; return (m,Just A.Times)} + <|> do {m <- reserved "/=" ; return (m,Just A.Div)} + <|> do {m <- reserved "%=" ; return (m,Just A.Rem)} <|> do {m <- reserved "=" ; return (m,Nothing)} --TODO the rest diff --git a/RainParseTest.hs b/RainParseTest.hs index 221be3b..186cc29 100644 --- a/RainParseTest.hs +++ b/RainParseTest.hs @@ -103,6 +103,7 @@ testExprs = --Dyadic operators: ,passE ("b + c", 0 ,Dy (Var "b") A.Plus (Var "c") ) + ,passE ("b % c", 0 ,Dy (Var "b") A.Rem (Var "c") ) ,passE ("b == c", 1 ,Dy (Var "b") A.Eq (Var "c") ) ,passE ("(b + c)", 2 ,Dy (Var "b") A.Plus (Var "c") ) ,passE ("(b == c)", 3 ,Dy (Var "b") A.Eq (Var "c") )