aboutsummaryrefslogtreecommitdiff
path: root/Sil/Parse.dcl
diff options
context:
space:
mode:
Diffstat (limited to 'Sil/Parse.dcl')
-rw-r--r--Sil/Parse.dcl37
1 files changed, 37 insertions, 0 deletions
diff --git a/Sil/Parse.dcl b/Sil/Parse.dcl
new file mode 100644
index 0000000..b48fdbc
--- /dev/null
+++ b/Sil/Parse.dcl
@@ -0,0 +1,37 @@
+definition module Sil.Parse
+
+from StdOverloaded import class ==, class toString
+
+from Data.Error import :: MaybeError
+
+from Sil.Parse.Parser import class name
+from Sil.Syntax import :: Program, :: Literal
+
+:: Token
+ = TParenOpen //* (
+ | TParenClose //* )
+ | TBraceOpen //* {
+ | TBraceClose //* }
+ | TComma //* ,
+ | TSemicolon //* ;
+ | TAssign //* :=
+ | TLit Literal //* True; False; integers
+ | TIf //* if
+ | TWhile //* while
+ | TReturn //* return
+ | TName String //* a string
+
+instance == Token
+instance toString Token
+instance name Token
+
+:: ParseError
+ = E.a: Invalid String a & toString a
+ | Expected String
+ | UnknownError
+
+instance toString ParseError
+
+tokenise :: [Char] -> MaybeError ParseError [Token]
+
+parse :: ([Token] -> MaybeError ParseError Program)