func (ce *BetweenExpression) TokenLiteral() string {
	return ce.Token.Literal
}
TokenLiteral returns the literal token of the node
package language
import (
	"bytes"
	"strings"
)
type Node interface {
	TokenLiteral() string
	String() string
}
type Statement interface {
	Node
	statementNode()
}
type Expression interface {
	Node
	expressionNode()
}
type Identifier struct {
	Token Token  
	Value string
}
func (i *Identifier) expressionNode() {
	_ = 1  
}
func (i *Identifier) TokenLiteral() string { return i.Token.Literal }
func (i *Identifier) String() string { return i.Value }
type ConditionalExpression struct {
	Token      Token  
	Expression Expression
}
func (es *ConditionalExpression) statementNode() {
	_ = 1  
}
func (ce *ConditionalExpression) TokenLiteral() string { return ce.Token.Literal }
func (ce *ConditionalExpression) String() string {
	if ce.Expression != nil {
		return ce.Expression.String()
	}
	return ""
}
type PrefixExpression struct {
	Token    Token  
	Operator string
	Right    Expression
}
func (pe *PrefixExpression) expressionNode() {
	_ = 1  
}
func (pe *PrefixExpression) TokenLiteral() string {
	return pe.Token.Literal
}
func (pe *PrefixExpression) String() string {
	var out bytes.Buffer
	out.WriteString("(")
	out.WriteString(pe.Operator)
	out.WriteString(pe.Right.String())
	out.WriteString(")")
	return out.String()
}
type InfixExpression struct {
	Token    Token  
	Left     Expression
	Operator string
	Right    Expression
}
func (oe *InfixExpression) expressionNode() {
	_ = 1  
}
func (oe *InfixExpression) TokenLiteral() string {
	return oe.Token.Literal
}
func (oe *InfixExpression) String() string {
	var out bytes.Buffer
	out.WriteString("(")
	out.WriteString(oe.Left.String())
	out.WriteString(" " + oe.Operator + " ")
	out.WriteString(oe.Right.String())
	out.WriteString(")")
	return out.String()
}
type CallExpression struct {
	Token    Token  
	Function Expression
	Arguments []Expression
}
func (ce *CallExpression) expressionNode() {
	_ = 1  
}
func (ce *CallExpression) TokenLiteral() string {
	return ce.Token.Literal
}
func (ce *CallExpression) String() string {
	var out bytes.Buffer
	args := []string{}
	for _, a := range ce.Arguments {
		args = append(args, a.String())
	}
	out.WriteString(ce.Function.String())
	out.WriteString("(")
	out.WriteString(strings.Join(args, ", "))
	out.WriteString(")")
	return out.String()
}
type IndexExpression struct {
	Token Token  
	Left  Expression
	Index Expression
	Type  ObjectType
}
func (ie *IndexExpression) expressionNode() {
	_ = 1  
}
func (ie *IndexExpression) TokenLiteral() string { return ie.Token.Literal }
func (ie *IndexExpression) String() string {
	var out bytes.Buffer
	out.WriteString("(")
	out.WriteString(ie.Left.String())
	out.WriteString("[")
	out.WriteString(ie.Index.String())
	out.WriteString("])")
	return out.String()
}
type BetweenExpression struct {
	Token Token  
	Left  Expression
	Range [2]Expression
}
func (ce *BetweenExpression) expressionNode() {
	_ = 1  
}