diff options
-rw-r--r-- | Sil/Parse.icl | 14 |
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 |