func NewParser(l *Lexer) *Parser {
	p := &Parser{
		l:      l,
		errors: []string{},
	}
	p.prefixParseFns = map[TokenType]prefixParseFn{}
	p.registerPrefix(IDENT, p.parseIdentifier)
	p.registerPrefix(NOT, p.parsePrefixExpression)
	p.registerPrefix(LPAREN, p.parseGroupedExpression)
	p.registerPrefix(SET, p.parseSetExpression)
	p.infixParseFns = make(map[TokenType]infixParseFn)
	p.registerInfix(EQ, p.parseInfixExpression)
	p.registerInfix(NotEQ, p.parseInfixExpression)
	p.registerInfix(LBRACKET, p.parseIndexExpression)
	p.registerInfix(DOT, p.parseIndexExpression)
	p.registerInfix(BETWEEN, p.parseBetweenExpression)
	p.registerInfix(LT, p.parseInfixExpression)
	p.registerInfix(GT, p.parseInfixExpression)
	p.registerInfix(LTE, p.parseInfixExpression)
	p.registerInfix(GTE, p.parseInfixExpression)
	p.registerInfix(AND, p.parseInfixExpression)
	p.registerInfix(OR, p.parseInfixExpression)
	p.registerInfix(LPAREN, p.parseCallExpression)
	p.registerInfix(PLUS, p.parseInfixExpression)
	p.registerInfix(MINUS, p.parseInfixExpression)
	p.nextToken()
	p.nextToken()
	return p
}
NewParser creates a new parser
package language
import (
	"fmt"
)
type Parser struct {
	l         *Lexer
	curToken  Token
	peekToken Token
	errors    []string
	prefixParseFns map[TokenType]prefixParseFn
	infixParseFns  map[TokenType]infixParseFn
}
type (
	prefixParseFn func() Expression
	infixParseFn  func(Expression) Expression
)
const (
	_ int = iota
	precedenceValueLowset
	precedenceValueOR                 
	precedenceValueAND                
	precedenceValueNOT                
	precedenceValueEqualComparators   
	precedenceValueBetweenComparator  
	precedenceValueComparators        
	precedenceValueOperators          
	precedenceValueCall               
	precedenceValueINDEX              
)
var precedences = map[TokenType]int{
	EQ:       precedenceValueEqualComparators,
	NotEQ:    precedenceValueEqualComparators,
	BETWEEN:  precedenceValueBetweenComparator,
	LT:       precedenceValueComparators,
	GT:       precedenceValueComparators,
	LTE:      precedenceValueComparators,
	GTE:      precedenceValueComparators,
	AND:      precedenceValueAND,
	OR:       precedenceValueOR,
	PLUS:     precedenceValueOperators,
	MINUS:    precedenceValueOperators,
	LPAREN:   precedenceValueCall,
	LBRACKET: precedenceValueINDEX,
	DOT:      precedenceValueINDEX,
}