lexer test pass

This commit is contained in:
Tyrel Souza 2021-11-30 14:45:39 -05:00
parent 7d8967403d
commit d93f87c889
3 changed files with 94 additions and 32 deletions

2
go.mod
View File

@ -1,3 +1,3 @@
module monkey module gitlab.com/Tyrel/monkey
go 1.17 go 1.17

View File

@ -1 +1,61 @@
package lexer package lexer
import (
"gitlab.com/Tyrel/monkey/token"
)
type Lexer struct {
input string
position int
readPosition int
ch byte
}
func New(input string) *Lexer {
l := &Lexer{input: input}
l.readChar()
return l
}
func (l *Lexer) readChar() {
if l.readPosition >= len(l.input) {
l.ch = 0
} else {
l.ch = l.input[l.readPosition]
}
l.position = l.readPosition
l.readPosition += 1
}
func (l *Lexer) NextToken() token.Token {
var tok token.Token
switch l.ch {
case '=':
tok = newToken(token.ASSIGN, l.ch)
case '+':
tok = newToken(token.PLUS, l.ch)
case '(':
tok = newToken(token.LPAREN, l.ch)
case ')':
tok = newToken(token.RPAREN, l.ch)
case '{':
tok = newToken(token.LBRACE, l.ch)
case '}':
tok = newToken(token.RBRACE, l.ch)
case ',':
tok = newToken(token.COMMA, l.ch)
case ';':
tok = newToken(token.SEMICOLON, l.ch)
case 0:
tok.Literal = ""
tok.Type = token.EOF
}
l.readChar()
return tok
}
func newToken(tokenType token.TokenType, ch byte) token.Token {
return token.Token{Type: tokenType, Literal: string(ch)}
}

View File

@ -1,13 +1,15 @@
package lexer package lexer
import ( import (
"testing" "testing"
"monkey/token"
"gitlab.com/Tyrel/monkey/token"
) )
func TestNextToken(t *testing.T) { func TestNextToken(t *testing.T) {
input := `=+(){},;` input := `=+(){},;`
tests := []struct{ tests := []struct {
expectedType token.TokenType expectedType token.TokenType
expectedLiteral string expectedLiteral string
}{ }{