aboutsummaryrefslogtreecommitdiff
path: root/Sil/Parse.icl
diff options
context:
space:
mode:
Diffstat (limited to 'Sil/Parse.icl')
-rw-r--r--Sil/Parse.icl53
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)