diff options
Diffstat (limited to 'Sil/Parse.icl')
-rw-r--r-- | Sil/Parse.icl | 53 |
1 files changed, 35 insertions, 18 deletions
diff --git a/Sil/Parse.icl b/Sil/Parse.icl index 7325826..16f3fca 100644 --- a/Sil/Parse.icl +++ b/Sil/Parse.icl @@ -48,6 +48,13 @@ where toString TStar = "*" toString TSlash = "/" toString TPercent = "%" + toString TEquals = "==" + toString TLe = "<=" + toString TGe = ">=" + toString TLt = "<" + toString TGt = ">" + toString TDoubleBar = "||" + toString TDoubleAmpersand = "&&" toString (TLit l) = toString l toString TIf = "if" toString TWhile = "while" @@ -76,25 +83,30 @@ where tks ['.':r=:[c:_]] t | isNameChar c = tks r` [TField $ toString f:t] where (f,r`) = span isNameChar r tks [':':'=':r] t = tks r [TAssign :t] - tks ['=':'=':r] t = tks r [TDoubleEquals :t] + tks ['=':'=':r] t = tks r [TEquals :t] + tks ['<':'>':r] t = tks r [TUnequals :t] + tks ['<':'=':r] t = tks r [TLe :t] + tks ['>':'=':r] t = tks r [TGe :t] + tks ['<' :r] t = tks r [TLt :t] + tks ['>' :r] t = tks r [TGt :t] tks ['|':'|':r] t = tks r [TDoubleBar :t] tks ['&':'&':r] t = tks r [TDoubleAmpersand:t] - tks ['(':r] t = tks r [TParenOpen :t] - tks [')':r] t = tks r [TParenClose :t] - tks ['[':r] t = tks r [TBrackOpen :t] - tks [']':r] t = tks r [TBrackClose :t] - tks ['{':r] t = tks r [TBraceOpen :t] - tks ['}':r] t = tks r [TBraceClose :t] - tks [',':r] t = tks r [TComma :t] - tks [':':r] t = tks r [TColon :t] - tks [';':r] t = tks r [TSemicolon :t] - tks ['!':r] t = tks r [TExclamation:t] - tks ['~':r] t = tks r [TTilde :t] - tks ['+':r] t = tks r [TPlus :t] - tks ['-':r] t = tks r [TMinus :t] - tks ['*':r] t = tks r [TStar :t] - tks ['/':r] t = tks r [TSlash :t] - tks ['%':r] t = tks r [TPercent :t] + tks ['(' :r] t = tks r [TParenOpen :t] + tks [')' :r] t = tks r [TParenClose :t] + tks ['[' :r] t = tks r [TBrackOpen :t] + tks [']' :r] t = tks r [TBrackClose :t] + tks ['{' :r] t = tks r [TBraceOpen :t] + tks ['}' :r] t = tks r [TBraceClose :t] + tks [',' :r] t = tks r [TComma :t] + tks [':' :r] t = tks r [TColon :t] + tks [';' :r] t = tks r [TSemicolon :t] + tks ['!' :r] t = tks r [TExclamation :t] + tks ['~' :r] t = tks r [TTilde :t] + tks ['+' :r] t = tks r [TPlus :t] + tks ['-' :r] t = tks r [TMinus :t] + tks ['*' :r] t = tks r [TStar :t] + tks ['/' :r] t = tks r [TSlash :t] + tks ['%' :r] t = tks r [TPercent :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] @@ -201,7 +213,12 @@ expression :: Parser Token Expression expression = rightAssoc (op TDoubleBar LogOr) $ rightAssoc (op TDoubleAmpersand LogAnd) - $ rightAssoc (op TDoubleEquals Equals) + $ rightAssoc (op TEquals Equals + <|> op TUnequals Unequals + <|> op TLe CmpLe + <|> op TGe CmpGe + <|> op TLt CmpLt + <|> op TGt CmpGt) $ rightAssoc (op TColon Cons) $ leftAssoc (op TPlus Add <|> op TMinus Sub) |