// SPDX-FileCopyrightText: 2024 Himbeer // // SPDX-License-Identifier: GPL-3.0-or-later package main type tokenKind int func (k tokenKind) String() string { switch k { case plusEquals: return "+=" case plus: return "+" case minusEquals: return "-=" case minus: return "-" case starEquals: return "*=" case star: return "*" case slashEquals: return "/=" case slash: return "/" case percentageEquals: return "%=" case percentage: return "%" case lparen: return "(" case rparen: return ")" case lbracket: return "[" case rbracket: return "]" case lbrace: return "{" case rbrace: return "}" case comma: return "," case dot: return "." case colon: return ":" case semicolon: return ";" case doubleEquals: return "==" case equals: return "=" case bangEquals: return "!=" case bang: return "!" case tildeEquals: return "~=" case tilde: return "~" case caretEquals: return "^=" case caret: return "^" case doubleAmpersand: return "&&" case ampersandEquals: return "&=" case ampersand: return "&" case doublePipe: return "||" case pipeEquals: return "|=" case pipe: return "|" case doubleLangleEquals: return "<<=" case doubleLangle: return "<<" case langleEquals: return "<=" case langle: return "<" case doubleRangleEquals: return ">>=" case doubleRangle: return ">>" case rangleEquals: return ">=" case rangle: return ">" case identifier: return "identifier" case str: return "string" case number: return "number" case export: return "export" case extern: return "extern" case function: return "func" case ret: return "return" case constKeyword: return "const" case mut: return "mut" } return "invalid token" } const ( none tokenKind = iota plusEquals plus minusEquals minus starEquals star slashEquals slash percentageEquals percentage lparen rparen lbracket rbracket lbrace rbrace comma dot colon semicolon doubleEquals equals bangEquals bang tildeEquals tilde caretEquals caret doubleAmpersand ampersandEquals ampersand doublePipe pipeEquals pipe doubleLangleEquals doubleLangle langleEquals langle doubleRangleEquals doubleRangle rangleEquals rangle identifier str number export extern function ret constKeyword mut ) type token struct { kind tokenKind value string line int } func (t token) String() string { if t.value != "" { return t.kind.String() + " " + t.value } else { return t.kind.String() } } type tokens struct { src <-chan token toks []token index int }