From a6e158b26593fd77972bf8ceca7655f6b332596c Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sun, 25 Mar 2018 10:10:10 +0200 Subject: stinger --- lexer/lexer.go | 4 +-- lexer/lexer_test.go | 6 ++-- parser/parser.go | 8 +++--- token/token.go | 70 +++++++++++++++++++++++------------------------ token/tokentype_string.go | 16 +++++++++++ 5 files changed, 60 insertions(+), 44 deletions(-) create mode 100644 token/tokentype_string.go diff --git a/lexer/lexer.go b/lexer/lexer.go index 8deda73..0807d6d 100644 --- a/lexer/lexer.go +++ b/lexer/lexer.go @@ -46,9 +46,9 @@ func (l *Lexer) NextToken() token.Token { case '*': tok = newToken(token.ASTERISK, l.ch) case '<': - tok = newToken(token.LT, l.ch) + tok = newToken(token.LESS, l.ch) case '>': - tok = newToken(token.GT, l.ch) + tok = newToken(token.MORE, l.ch) case ';': tok = newToken(token.SEMICOLON, l.ch) case ':': diff --git a/lexer/lexer_test.go b/lexer/lexer_test.go index f63d7c3..3e8a0e8 100644 --- a/lexer/lexer_test.go +++ b/lexer/lexer_test.go @@ -80,15 +80,15 @@ macro(x, y) { x + y; }; {token.INT, "5"}, {token.SEMICOLON, ";"}, {token.INT, "5"}, - {token.LT, "<"}, + {token.LESS, "<"}, {token.INT, "10"}, - {token.GT, ">"}, + {token.MORE, ">"}, {token.INT, "5"}, {token.SEMICOLON, ";"}, {token.IF, "if"}, {token.LPAREN, "("}, {token.INT, "5"}, - {token.LT, "<"}, + {token.LESS, "<"}, {token.INT, "10"}, {token.RPAREN, ")"}, {token.LBRACE, "{"}, diff --git a/parser/parser.go b/parser/parser.go index 4795761..855cc9b 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -23,8 +23,8 @@ const ( var precedences = map[token.TokenType]int{ token.EQ: EQUALS, token.NOT_EQ: EQUALS, - token.LT: LESSGREATER, - token.GT: LESSGREATER, + token.LESS: LESSGREATER, + token.MORE: LESSGREATER, token.PLUS: SUM, token.MINUS: SUM, token.SLASH: PRODUCT, @@ -77,8 +77,8 @@ func New(l *lexer.Lexer) *Parser { p.registerInfix(token.ASTERISK, p.parseInfixExpression) p.registerInfix(token.EQ, p.parseInfixExpression) p.registerInfix(token.NOT_EQ, p.parseInfixExpression) - p.registerInfix(token.LT, p.parseInfixExpression) - p.registerInfix(token.GT, p.parseInfixExpression) + p.registerInfix(token.LESS, p.parseInfixExpression) + p.registerInfix(token.MORE, p.parseInfixExpression) p.registerInfix(token.LPAREN, p.parseCallExpression) p.registerInfix(token.LBRACKET, p.parseIndexExpression) diff --git a/token/token.go b/token/token.go index c7bf73a..b0b4d5a 100644 --- a/token/token.go +++ b/token/token.go @@ -1,51 +1,51 @@ package token -type TokenType string +//go:generate stringer -type=TokenType + +type TokenType int const ( - ILLEGAL = "ILLEGAL" - EOF = "EOF" + ILLEGAL TokenType = iota + EOF // Identifiers + literals - IDENT = "IDENT" // add, foobar, x, y, ... - INT = "INT" // 1343456 - STRING = "STRING" // "foobar" + IDENT // add, foobar, x, y, ... + INT // 1343456 + STRING // "foobar" // Operators - ASSIGN = "=" - PLUS = "+" - MINUS = "-" - BANG = "!" - ASTERISK = "*" - SLASH = "/" - - LT = "<" - GT = ">" - - EQ = "==" - NOT_EQ = "!=" + ASSIGN // "=" + PLUS // "+" + MINUS // "-" + BANG // "!" + ASTERISK // "*" + SLASH // "/" + LESS // "<" + MORE // ">" + EQ // "==" + NOT_EQ // "!=" // Delimiters - COMMA = "," - SEMICOLON = ";" - COLON = ":" + COMMA // "," + SEMICOLON // ";" + COLON // ":" - LPAREN = "(" - RPAREN = ")" - LBRACE = "{" - RBRACE = "}" - LBRACKET = "[" - RBRACKET = "]" + LPAREN // "(" + RPAREN // ")" + LBRACE // "{" + RBRACE // "}" + LBRACKET // "[" + RBRACKET // "]" // Keywords - FUNCTION = "FUNCTION" - LET = "LET" - TRUE = "TRUE" - FALSE = "FALSE" - IF = "IF" - ELSE = "ELSE" - RETURN = "RETURN" - MACRO = "MACRO" + FUNCTION + LET + TRUE + FALSE + IF + ELSE + RETURN + MACRO ) type Token struct { diff --git a/token/tokentype_string.go b/token/tokentype_string.go new file mode 100644 index 0000000..f433400 --- /dev/null +++ b/token/tokentype_string.go @@ -0,0 +1,16 @@ +// Code generated by "stringer -type=TokenType"; DO NOT EDIT. + +package token + +import "strconv" + +const _TokenType_name = "ILLEGALEOFIDENTINTSTRINGASSIGNPLUSMINUSBANGASTERISKSLASHLESSMOREEQNOT_EQCOMMASEMICOLONCOLONLPARENRPARENLBRACERBRACELBRACKETRBRACKETFUNCTIONLETTRUEFALSEIFELSERETURNMACRO" + +var _TokenType_index = [...]uint8{0, 7, 10, 15, 18, 24, 30, 34, 39, 43, 51, 56, 60, 64, 66, 72, 77, 86, 91, 97, 103, 109, 115, 123, 131, 139, 142, 146, 151, 153, 157, 163, 168} + +func (i TokenType) String() string { + if i < 0 || i >= TokenType(len(_TokenType_index)-1) { + return "TokenType(" + strconv.FormatInt(int64(i), 10) + ")" + } + return _TokenType_name[_TokenType_index[i]:_TokenType_index[i+1]] +} -- cgit v1.2.3