aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2018-03-25 10:10:10 +0200
committerDimitri Sokolyuk <demon@dim13.org>2018-03-25 10:10:10 +0200
commita6e158b26593fd77972bf8ceca7655f6b332596c (patch)
tree2034dd4d53d62d2f2fa9c1df8615a4a7a50b3aff
parent129a6b820984b02989ea87935bccbd7c4f5ad34e (diff)
stinger
-rw-r--r--lexer/lexer.go4
-rw-r--r--lexer/lexer_test.go6
-rw-r--r--parser/parser.go8
-rw-r--r--token/token.go70
-rw-r--r--token/tokentype_string.go16
5 files changed, 60 insertions, 44 deletions
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]]
+}