2 | import public Data.Fin
15 | implementation Show Literal where
17 | MkIdentifier => "IDENT"
22 | MkString => "STRING"
60 | | MkGreaterThanOrEqual
75 | implementation Show Operator where
96 | MkShlAssign => "<<="
97 | MkShrAssign => ">>="
98 | MkAndNotAssign => "&^="
99 | MkLogicalAnd => "&&"
100 | MkLogicalOr => "||"
110 | MkLessThanOrEqual => "<="
111 | MkGreaterThanOrEqual => ">="
113 | MkEllipsis => "..."
130 | precedence : Operator -> Precedence
137 | MkLessThanOrEqual => 3
139 | MkGreaterThanOrEqual => 3
182 | implementation Show Keyword where
188 | MkContinue => "continue"
189 | MkDefault => "default"
192 | MkFallthrough => "fallthrough"
198 | MkImport => "import"
199 | MkInterface => "interface"
201 | MkPackage => "package"
203 | MkReturn => "return"
204 | MkSelect => "select"
205 | MkStruct => "struct"
206 | MkSwitch => "switch"
211 | implementation Eq Keyword where
212 | MkBreak == MkBreak = True
213 | MkCase == MkCase = True
214 | MkChan == MkChan = True
215 | MkConst == MkConst = True
216 | MkContinue == MkContinue = True
217 | MkDefault == MkDefault = True
218 | MkDefer == MkDefer = True
219 | MkElse == MkElse = True
220 | MkFallthrough == MkFallthrough = True
221 | MkFor == MkFor = True
222 | MkFunc == MkFunc = True
223 | MkGo == MkGo = True
224 | MkGoto == MkGoto = True
225 | MkIf == MkIf = True
226 | MkImport == MkImport = True
227 | MkInterface == MkInterface = True
228 | MkMap == MkMap = True
229 | MkPackage == MkPackage = True
230 | MkRange == MkRange = True
231 | MkReturn == MkReturn = True
232 | MkSelect == MkSelect = True
233 | MkStruct == MkStruct = True
234 | MkSwitch == MkSwitch = True
235 | MkType == MkType = True
236 | MkVar == MkVar = True
240 | keywords : List (String, Keyword)
241 | keywords = map (\a => (show a, a))
270 | getKeyword : String -> Maybe Keyword
271 | getKeyword str = List.lookup str keywords
278 | implementation Show Additional where
287 | | MkLiteralToken Literal
288 | | MkOperatorToken Operator
289 | | MkKeywordToken Keyword
290 | | MkAdditionalToken Additional
293 | implementation Show Token where
295 | MkIllegal => "ILLEGAL"
297 | MkComment => "COMMENT"
298 | MkLiteralToken l => show l
299 | MkOperatorToken o => show o
300 | MkKeywordToken k => show k
301 | MkAdditionalToken a => show a
304 | isLiteral : Token -> Bool
306 | MkLiteralToken _ => True
310 | isOperator : Token -> Bool
312 | MkOperatorToken _ => True
313 | MkAdditionalToken MkTilde => True
317 | isKeyword : Token -> Bool
319 | MkOperatorToken _ => True
323 | lookup : String -> Token
325 | let Just keyword = getKeyword str
326 | | Nothing => MkLiteralToken MkIdentifier
327 | in MkKeywordToken keyword