Added INITIAL variable abbreviations (as specifications) to the occam parser

This commit is contained in:
Neil Brown 2008-03-10 22:55:57 +00:00
parent 239dea3f36
commit b83bcc0f34
2 changed files with 19 additions and 8 deletions

View File

@ -56,7 +56,7 @@ $vertSpace = [\r\n]
| "DATA" | "DATA"
| "ELSE" | "ELSE"
| "FALSE" | "FOR" | "FROM" | "FUNCTION" | "FALSE" | "FOR" | "FROM" | "FUNCTION"
| "IF" | "IN" | "INLINE" | "INT" | "INT16" | "INT32" | "INT64" | "IF" | "IN" | "INITIAL" | "INLINE" | "INT" | "INT16" | "INT32" | "INT64"
| "IS" | "IS"
| "MINUS" | "MOSTNEG" | "MOSTPOS" | "MINUS" | "MOSTNEG" | "MOSTPOS"
| "NOT" | "NOT"

View File

@ -109,13 +109,12 @@ sRightR = reserved ")"
sSemi = reserved ";" sSemi = reserved ";"
--}}} --}}}
--{{{ keywords --{{{ keywords
sAFTER, sALT, sAND, sANY, sAT, sBITAND, sBITNOT, sBITOR, sBOOL, sBYTE, sAFTER, sALT, sAND, sANY, sAT, sBITAND, sBITNOT, sBITOR, sBOOL, sBYTE, sBYTESIN, sCASE, sCHAN, sDATA,
sBYTESIN, sCASE, sCHAN, sDATA, sELSE, sFALSE, sFOR, sFROM, sFUNCTION, sIF, sELSE, sFALSE, sFOR, sFROM, sFUNCTION, sIF, sINLINE, sIN, sINT, sINT16, sINT32, sINT64, sIS,
sINLINE, sIN, sINT, sINT16, sINT32, sINT64, sIS, sMINUS, sMOSTNEG, sMOSTPOS, sMINUS, sMOSTNEG, sMOSTPOS, sNOT, sOF, sOFFSETOF, sOR, sPACKED, sPAR, sPLACE, sPLACED, sPLUS,
sNOT, sOF, sOFFSETOF, sOR, sPACKED, sPAR, sPLACE, sPLACED, sPLUS, sPORT, sPORT, sPRI, sPROC, sPROCESSOR, sPROTOCOL, sREAL32, sREAL64, sRECORD, sREM, sRESHAPES, sRESULT,
sPRI, sPROC, sPROCESSOR, sPROTOCOL, sREAL32, sREAL64, sRECORD, sREM, sRETYPES, sROUND, sSEQ, sSIZE, sSKIP, sSTOP, sTIMER, sTIMES, sTRUE, sTRUNC, sTYPE, sVAL, sVALOF,
sRESHAPES, sRESULT, sRETYPES, sROUND, sSEQ, sSIZE, sSKIP, sSTOP, sTIMER, sWHILE, sWORKSPACE, sVECSPACE
sTIMES, sTRUE, sTRUNC, sTYPE, sVAL, sVALOF, sWHILE, sWORKSPACE, sVECSPACE
:: OccParser () :: OccParser ()
sAFTER = reserved "AFTER" sAFTER = reserved "AFTER"
@ -140,6 +139,7 @@ sFUNCTION = reserved "FUNCTION"
sIF = reserved "IF" sIF = reserved "IF"
sINLINE = reserved "INLINE" sINLINE = reserved "INLINE"
sIN = reserved "IN" sIN = reserved "IN"
sINITIAL = reserved "INITIAL"
sINT = reserved "INT" sINT = reserved "INT"
sINT16 = reserved "INT16" sINT16 = reserved "INT16"
sINT32 = reserved "INT32" sINT32 = reserved "INT32"
@ -1272,6 +1272,7 @@ declOf spec newName
abbreviation :: OccParser A.Specification abbreviation :: OccParser A.Specification
abbreviation abbreviation
= valIsAbbrev = valIsAbbrev
<|> initialIsAbbrev
<|> isAbbrev newVariableName variable <|> isAbbrev newVariableName variable
<|> isAbbrev newChannelName channel <|> isAbbrev newChannelName channel
<|> chanArrayAbbrev <|> chanArrayAbbrev
@ -1290,6 +1291,16 @@ valIsAbbrev
return $ A.Specification m n $ A.IsExpr m A.ValAbbrev t e' return $ A.Specification m n $ A.IsExpr m A.ValAbbrev t e'
<?> "VAL IS abbreviation" <?> "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 :: OccParser A.Name -> OccParser A.Variable -> OccParser A.Specification
isAbbrev newName oldVar isAbbrev newName oldVar
= do m <- md = do m <- md