From b83bcc0f3466d744454f0604d2d36085c9d76489 Mon Sep 17 00:00:00 2001 From: Neil Brown Date: Mon, 10 Mar 2008 22:55:57 +0000 Subject: [PATCH] Added INITIAL variable abbreviations (as specifications) to the occam parser --- frontends/LexOccam.x | 2 +- frontends/ParseOccam.hs | 25 ++++++++++++++++++------- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/frontends/LexOccam.x b/frontends/LexOccam.x index 4bb5570..45327fb 100644 --- a/frontends/LexOccam.x +++ b/frontends/LexOccam.x @@ -56,7 +56,7 @@ $vertSpace = [\r\n] | "DATA" | "ELSE" | "FALSE" | "FOR" | "FROM" | "FUNCTION" - | "IF" | "IN" | "INLINE" | "INT" | "INT16" | "INT32" | "INT64" + | "IF" | "IN" | "INITIAL" | "INLINE" | "INT" | "INT16" | "INT32" | "INT64" | "IS" | "MINUS" | "MOSTNEG" | "MOSTPOS" | "NOT" diff --git a/frontends/ParseOccam.hs b/frontends/ParseOccam.hs index 4838455..f060f19 100644 --- a/frontends/ParseOccam.hs +++ b/frontends/ParseOccam.hs @@ -109,13 +109,12 @@ sRightR = reserved ")" sSemi = reserved ";" --}}} --{{{ keywords -sAFTER, sALT, sAND, sANY, sAT, sBITAND, sBITNOT, sBITOR, sBOOL, sBYTE, - sBYTESIN, sCASE, sCHAN, sDATA, sELSE, sFALSE, sFOR, sFROM, sFUNCTION, sIF, - sINLINE, sIN, sINT, sINT16, sINT32, sINT64, sIS, sMINUS, sMOSTNEG, sMOSTPOS, - sNOT, sOF, sOFFSETOF, sOR, sPACKED, sPAR, sPLACE, sPLACED, sPLUS, sPORT, - sPRI, sPROC, sPROCESSOR, sPROTOCOL, sREAL32, sREAL64, sRECORD, sREM, - sRESHAPES, sRESULT, sRETYPES, sROUND, sSEQ, sSIZE, sSKIP, sSTOP, sTIMER, - sTIMES, sTRUE, sTRUNC, sTYPE, sVAL, sVALOF, sWHILE, sWORKSPACE, sVECSPACE +sAFTER, sALT, sAND, sANY, sAT, sBITAND, sBITNOT, sBITOR, sBOOL, sBYTE, sBYTESIN, sCASE, sCHAN, sDATA, + sELSE, sFALSE, sFOR, sFROM, sFUNCTION, sIF, sINLINE, sIN, sINT, sINT16, sINT32, sINT64, sIS, + sMINUS, sMOSTNEG, sMOSTPOS, sNOT, sOF, sOFFSETOF, sOR, sPACKED, sPAR, sPLACE, sPLACED, sPLUS, + sPORT, sPRI, sPROC, sPROCESSOR, sPROTOCOL, sREAL32, sREAL64, sRECORD, sREM, sRESHAPES, sRESULT, + sRETYPES, sROUND, sSEQ, sSIZE, sSKIP, sSTOP, sTIMER, sTIMES, sTRUE, sTRUNC, sTYPE, sVAL, sVALOF, + sWHILE, sWORKSPACE, sVECSPACE :: OccParser () sAFTER = reserved "AFTER" @@ -140,6 +139,7 @@ sFUNCTION = reserved "FUNCTION" sIF = reserved "IF" sINLINE = reserved "INLINE" sIN = reserved "IN" +sINITIAL = reserved "INITIAL" sINT = reserved "INT" sINT16 = reserved "INT16" sINT32 = reserved "INT32" @@ -1272,6 +1272,7 @@ declOf spec newName abbreviation :: OccParser A.Specification abbreviation = valIsAbbrev + <|> initialIsAbbrev <|> isAbbrev newVariableName variable <|> isAbbrev newChannelName channel <|> chanArrayAbbrev @@ -1290,6 +1291,16 @@ valIsAbbrev return $ A.Specification m n $ A.IsExpr m A.ValAbbrev t e' "VAL IS abbreviation" +initialIsAbbrev :: OccParser A.Specification +initialIsAbbrev + = do m <- md + (t, n) <- tryXVVX sINITIAL dataSpecifier newVariableName sIS + e <- expressionOfType t + sColon + eol + (e', _, _) <- constantFold e + return $ A.Specification m n $ A.IsExpr m A.Original t e' + isAbbrev :: OccParser A.Name -> OccParser A.Variable -> OccParser A.Specification isAbbrev newName oldVar = do m <- md