package token Token :: union { Asterisk, Bang, Comma, EOF, Else, Equal_Sign, Equals, False, Forward_Slash, Function, Greater_Than, Identifier, If, Illegal, Integer, Left_Brace, Left_Parenthesis, Less_Than, Let, Minus, Not_Equals, Plus, Return, Right_Brace, Right_Parenthesis, Semicolon, True, } Asterisk :: struct {} Bang :: struct {} Comma :: struct {} EOF :: struct {} Else :: struct {} Equal_Sign :: struct {} Equals :: struct {} False :: struct {} Forward_Slash :: struct {} Function :: struct {} Greater_Than :: struct {} Identifier :: struct { literal: string, } If :: struct {} Illegal :: struct {} Integer :: struct { literal: int, } Left_Brace :: struct {} Left_Parenthesis :: struct {} Less_Than :: struct {} Let :: struct {} Minus :: struct {} Not_Equals :: struct {} Plus :: struct {} Return :: struct {} Right_Brace :: struct {} Right_Parenthesis :: struct {} Semicolon :: struct {} True :: struct {} lookup_identifier :: proc(ident: string) -> Token { switch ident { case "fn": return Function{} case "let": return Let{} case "if": return If{} case "else": return Else{} case "true": return True{} case "false": return False{} case "return": return Return{} case: return Identifier{ident} } }