diff options
author | Camil Staps | 2017-07-19 12:25:45 +0000 |
---|---|---|
committer | Camil Staps | 2017-07-19 12:25:45 +0000 |
commit | 2788df88e6261ac641adf9f39bbfe517a7d77d9c (patch) | |
tree | 49ee4f4932dccf4b06782bd4879898dfa6fdfe4e /Sil/Parse.icl | |
parent | Add readme and license (diff) |
Add else if
Diffstat (limited to 'Sil/Parse.icl')
-rw-r--r-- | Sil/Parse.icl | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/Sil/Parse.icl b/Sil/Parse.icl index 3a11622..2e21d08 100644 --- a/Sil/Parse.icl +++ b/Sil/Parse.icl @@ -138,17 +138,18 @@ initialisation = pure [{init_type=t, init_name=n} \\ n <- ns] statement :: Parser Token Statement -statement = ((declaration - <|> liftM Application application +statement = declaration + <|> liftM Application (application <* item TSemicolon) <|> return <|> if` - /*<|> while*/) <* item TSemicolon) <|> machinecode + //<|> while + <|> machinecode where declaration :: Parser Token Statement - declaration = liftM2 Declaration name (item TAssign *> application) + declaration = liftM2 Declaration name (item TAssign *> application <* item TSemicolon) return :: Parser Token Statement - return = liftM Return (item TReturn *> optional application) + return = liftM Return (item TReturn *> optional application <* item TSemicolon) machinecode :: Parser Token Statement machinecode = (\(TMachineCode s) -> MachineStm s) <$> satisfy isMachineCode @@ -158,8 +159,14 @@ where if` = item TIf *> parenthised application >>= \cond -> braced codeblock >>= \iftrue -> + many elseif >>= \elseifs -> optional (item TElse *> braced codeblock) >>= \iffalse -> - pure $ If cond iftrue iffalse + pure $ If [(cond,iftrue):elseifs] iffalse + where + elseif = list [TElse, TIf] *> + parenthised application >>= \cond -> + braced codeblock >>= \block -> + pure (cond, block) application :: Parser Token Application application |