aboutsummaryrefslogtreecommitdiff
path: root/Sil
diff options
context:
space:
mode:
Diffstat (limited to 'Sil')
-rw-r--r--Sil/Parse.icl14
1 files changed, 8 insertions, 6 deletions
diff --git a/Sil/Parse.icl b/Sil/Parse.icl
index fb77def..4d4b5eb 100644
--- a/Sil/Parse.icl
+++ b/Sil/Parse.icl
@@ -85,12 +85,12 @@ where
tks ['*':r] t = tks r [TStar :t]
tks ['/':r] t = tks r [TSlash :t]
tks ['%':r] t = tks r [TPercent :t]
- tks ['i':'f' :s:r] t | isSpace s = tks r [TIf :t]
- tks ['e':'l':'s':'e' :s:r] t | isSpace s = tks r [TElse :t]
- tks ['w':'h':'i':'l':'e' :s:r] t | isSpace s = tks r [TWhile :t]
- tks ['r':'e':'t':'u':'r':'n':s:r] t | isSpace s = tks r [TReturn:t]
- tks ['T':'r':'u':'e' :s:r] t | isSpace s = tks r [TLit $ BLit True :t]
- tks ['F':'a':'l':'s':'e' :s:r] t | isSpace s = tks r [TLit $ BLit False:t]
+ tks ['i':'f' :r=:[n:_]] t | isNotNameChar n = tks r [TIf :t]
+ tks ['e':'l':'s':'e' :r=:[n:_]] t | isNotNameChar n = tks r [TElse :t]
+ tks ['w':'h':'i':'l':'e' :r=:[n:_]] t | isNotNameChar n = tks r [TWhile :t]
+ tks ['r':'e':'t':'u':'r':'n':r=:[n:_]] t | isNotNameChar n = tks r [TReturn:t]
+ tks ['T':'r':'u':'e' :r=:[n:_]] t | isNotNameChar n = tks r [TLit $ BLit True :t]
+ tks ['F':'a':'l':'s':'e' :r=:[n:_]] t | isNotNameChar n = tks r [TLit $ BLit False:t]
tks ['|':'~':r] t = tks r` [TMachineCode $ toString c:t]
where (c,r`) = span (not o flip isMember ['\r\n']) r
tks cs=:[h:_] t
@@ -105,6 +105,8 @@ where
isNameChar :: Char -> Bool
isNameChar c = isAlpha c || isMember c ['_\'']
+ isNotNameChar = not o isNameChar
+
parse :: ([Token] -> MaybeError ParseError Program)
parse = fst o runParser program