diff --git a/frontends/LexOccam.x b/frontends/LexOccam.x index 45327fb..f4f637c 100644 --- a/frontends/LexOccam.x +++ b/frontends/LexOccam.x @@ -50,6 +50,7 @@ $vertSpace = [\r\n] | "<" | ">" | "~" | "##" + | "|" | "AFTER" | "ALT" | "AND" | "ANY" | "AT" | "BITAND" | "BITNOT" | "BITOR" | "BOOL" | "BYTE" | "BYTESIN" | "CASE" | "CHAN" diff --git a/frontends/ParseOccam.hs b/frontends/ParseOccam.hs index f060f19..6c9990d 100644 --- a/frontends/ParseOccam.hs +++ b/frontends/ParseOccam.hs @@ -90,13 +90,12 @@ plainToken t = genToken test test (_, t') = if t == t' then Just () else Nothing --}}} --{{{ symbols -sAmp, sAssign, sBang, sColon, sColons, sComma, sEq, sLeft, sLeftR, sQuest, - sRight, sRightR, sSemi - :: OccParser () +sAmp, sAssign, sBang, sColon, sColons, sComma, sEq, sLeft, sLeftR, sQuest, sRight, sRightR, sSemi :: OccParser () sAmp = reserved "&" sAssign = reserved ":=" sBang = reserved "!" +sBar = reserved "|" sColon = reserved ":" sColons = reserved "::" sComma = reserved "," @@ -900,6 +899,16 @@ expression <|> operand "expression" +arrayConstructor :: OccParser A.Expression +arrayConstructor + = do m <- md + sLeft + r <- replicator + sBar + e <- expression + sRight + return $ A.ExprConstr m $ A.RepConstr m r e + associativeOpExpression :: OccParser A.Expression associativeOpExpression = do m <- md @@ -1119,6 +1128,7 @@ operand' <|> do { m <- md; sTRUE; return $ A.True m } <|> do { m <- md; sFALSE; return $ A.False m } <|> table + <|> arrayConstructor "operand" --}}} --{{{ variables, channels, timers, ports