interpreter-in-go/pkg/parser/precedence.go
2025-01-10 17:48:54 -08:00

44 lines
814 B
Go

package parser
import (
"code.jmug.me/jmug/interpreter-in-go/pkg/token"
)
const (
_ int = iota
LOWEST
EQUALS // ==
LESSGREATER // > or <
SUM // +
PRODUCT // *
PREFIX // -X or !X
CALL // myFunction(X)
INDEX // array[index]
)
var precedences = map[token.TokenType]int{
token.EQ: EQUALS,
token.NOT_EQ: EQUALS,
token.GT: LESSGREATER,
token.LT: LESSGREATER,
token.PLUS: SUM,
token.MINUS: SUM,
token.ASTERISK: PRODUCT,
token.SLASH: PRODUCT,
token.LPAREN: CALL,
token.LBRACKET: INDEX,
}
func (p *Parser) peekPrecedence() int {
if pr, ok := precedences[p.peekToken.Type]; ok {
return pr
}
return LOWEST
}
func (p *Parser) curPrecedence() int {
if pr, ok := precedences[p.curToken.Type]; ok {
return pr
}
return LOWEST
}