Reduced token size
This commit is contained in:
@ -6,13 +6,8 @@ import (
|
||||
"git.akyoto.dev/cli/q/src/build/token"
|
||||
)
|
||||
|
||||
var (
|
||||
call = []byte("λ")
|
||||
array = []byte("@")
|
||||
)
|
||||
|
||||
// Parse generates an expression tree from tokens.
|
||||
func Parse(tokens token.List) *Expression {
|
||||
func Parse(tokens []token.Token) *Expression {
|
||||
var (
|
||||
cursor *Expression
|
||||
root *Expression
|
||||
@ -43,20 +38,18 @@ func Parse(tokens token.List) *Expression {
|
||||
parameters := NewList(tokens[groupPosition:i])
|
||||
|
||||
node := New()
|
||||
node.Token.Kind = token.Operator
|
||||
node.Token.Position = tokens[groupPosition].Position
|
||||
|
||||
switch t.Kind {
|
||||
case token.GroupEnd:
|
||||
node.Token.Bytes = call
|
||||
node.Precedence = precedence("λ")
|
||||
|
||||
node.Token.Kind = token.Call
|
||||
case token.ArrayEnd:
|
||||
node.Token.Bytes = array
|
||||
node.Precedence = precedence("@")
|
||||
node.Token.Kind = token.Array
|
||||
}
|
||||
|
||||
if cursor.Token.Kind == token.Operator && node.Precedence > cursor.Precedence {
|
||||
node.Precedence = precedence(node.Token.Kind)
|
||||
|
||||
if cursor.Token.IsOperator() && node.Precedence > cursor.Precedence {
|
||||
cursor.LastChild().Replace(node)
|
||||
} else {
|
||||
if cursor == root {
|
||||
@ -108,18 +101,18 @@ func Parse(tokens token.List) *Expression {
|
||||
continue
|
||||
}
|
||||
|
||||
if t.Kind == token.Operator {
|
||||
if t.IsOperator() {
|
||||
if cursor == nil {
|
||||
cursor = NewLeaf(t)
|
||||
cursor.Precedence = precedence(t.Text())
|
||||
cursor.Precedence = precedence(t.Kind)
|
||||
root = cursor
|
||||
continue
|
||||
}
|
||||
|
||||
node := NewLeaf(t)
|
||||
node.Precedence = precedence(t.Text())
|
||||
node.Precedence = precedence(t.Kind)
|
||||
|
||||
if cursor.Token.Kind == token.Operator {
|
||||
if cursor.Token.IsOperator() {
|
||||
oldPrecedence := cursor.Precedence
|
||||
newPrecedence := node.Precedence
|
||||
|
||||
|
Reference in New Issue
Block a user