separate number into float and integer
This commit is contained in:
parent
10f55313b0
commit
daab50d54c
22 changed files with 848 additions and 428 deletions
|
|
@ -28,7 +28,8 @@ const (
|
|||
TokenBang
|
||||
TokenSemicolon
|
||||
|
||||
TokenNumber
|
||||
TokenInteger
|
||||
TokenFloat
|
||||
TokenHexadecimal
|
||||
TokenString
|
||||
TokenName
|
||||
|
|
@ -55,6 +56,7 @@ const (
|
|||
TokenComma
|
||||
TokenDot
|
||||
TokenColon
|
||||
TokenArrow
|
||||
|
||||
TokenAssign
|
||||
TokenDeclare
|
||||
|
|
@ -86,8 +88,10 @@ func (t TokenType) String() string {
|
|||
return "slash"
|
||||
case TokenBang:
|
||||
return "bang"
|
||||
case TokenNumber:
|
||||
return "number"
|
||||
case TokenFloat:
|
||||
return "float"
|
||||
case TokenInteger:
|
||||
return "integer"
|
||||
case TokenString:
|
||||
return "string"
|
||||
case TokenTrue:
|
||||
|
|
@ -135,7 +139,7 @@ func (t TokenType) String() string {
|
|||
case TokenDeclare:
|
||||
return "declare"
|
||||
case TokenFunc:
|
||||
return "func"
|
||||
return "fn"
|
||||
case TokenReturn:
|
||||
return "return"
|
||||
case TokenWhile:
|
||||
|
|
@ -162,6 +166,8 @@ func (t TokenType) String() string {
|
|||
return "pipe"
|
||||
case TokenHexadecimal:
|
||||
return "hexadecimal"
|
||||
case TokenArrow:
|
||||
return "arrow"
|
||||
}
|
||||
|
||||
panic("UNDEFINED TOKENTYPE STRING CONVERSION")
|
||||
|
|
@ -209,6 +215,9 @@ func (l *Lexer) NextToken() (Token, error) {
|
|||
case '+':
|
||||
return l.makeToken(TokenPlus), nil
|
||||
case '-':
|
||||
if l.accept('>') {
|
||||
return l.makeToken(TokenArrow), nil
|
||||
}
|
||||
return l.makeToken(TokenMinus), nil
|
||||
case '*':
|
||||
return l.makeToken(TokenStar), nil
|
||||
|
|
@ -339,7 +348,7 @@ func (l *Lexer) NextToken() (Token, error) {
|
|||
return l.makeToken(TokenElse), nil
|
||||
case "var":
|
||||
return l.makeToken(TokenVar), nil
|
||||
case "func":
|
||||
case "fn":
|
||||
return l.makeToken(TokenFunc), nil
|
||||
case "while":
|
||||
return l.makeToken(TokenWhile), nil
|
||||
|
|
@ -364,7 +373,7 @@ func (l *Lexer) NextToken() (Token, error) {
|
|||
return l.makeToken(TokenHexadecimal), nil
|
||||
}
|
||||
|
||||
return l.makeToken(TokenNumber), nil
|
||||
return l.makeToken(TokenInteger), nil
|
||||
} else if unicode.IsDigit(c) {
|
||||
for unicode.IsDigit(l.peek()) {
|
||||
l.advance()
|
||||
|
|
@ -375,9 +384,11 @@ func (l *Lexer) NextToken() (Token, error) {
|
|||
for unicode.IsDigit(l.peek()) {
|
||||
l.advance()
|
||||
}
|
||||
return l.makeToken(TokenFloat), nil
|
||||
}
|
||||
|
||||
return l.makeToken(TokenNumber), nil
|
||||
return l.makeToken(TokenInteger), nil
|
||||
|
||||
}
|
||||
|
||||
return l.makeToken(TokenError), errors.New(fmt.Sprintf("invalid token %c", c))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue