mirror of
https://github.com/johnkerl/miller.git
synced 2026-08-02 04:22:59 +00:00
AST-interpreter iterate
This commit is contained in:
parent
a6ad23732b
commit
b26a47ddfe
1 changed files with 43 additions and 1 deletions
|
|
@ -114,7 +114,8 @@ func (this *Interpreter) evaluateNode(
|
|||
break
|
||||
case NodeTypeOperator:
|
||||
this.checkArity(node, 2) // xxx temp -- binary-only for now
|
||||
return "", errors.New("unhandled")
|
||||
return this.evaluateBinaryOperatorNode(node, node.Children[0], node.Children[1],
|
||||
inrec, context)
|
||||
break
|
||||
case NodeTypeContextVariable:
|
||||
return this.evaluateContextVariableNode(node, context)
|
||||
|
|
@ -151,3 +152,44 @@ func (this *Interpreter) evaluateContextVariableNode(
|
|||
}
|
||||
return "", errors.New("internal coding error") // xxx libify
|
||||
}
|
||||
|
||||
func (this *Interpreter) evaluateBinaryOperatorNode(
|
||||
node *ASTNode,
|
||||
leftChild *ASTNode,
|
||||
rightChild *ASTNode,
|
||||
inrec *containers.Lrec,
|
||||
context *runtime.Context,
|
||||
) (string, error) {
|
||||
sval := string(node.Token.Lit)
|
||||
|
||||
leftValue, leftErr := this.evaluateNode(leftChild, inrec, context)
|
||||
if leftErr != nil {
|
||||
return "", leftErr
|
||||
}
|
||||
rightValue, rightErr := this.evaluateNode(rightChild, inrec, context)
|
||||
if rightErr != nil {
|
||||
return "", rightErr
|
||||
}
|
||||
|
||||
switch sval {
|
||||
case ".":
|
||||
return leftValue + rightValue, nil
|
||||
break
|
||||
case "+":
|
||||
return "", errors.New("unhandled")
|
||||
break
|
||||
case "-":
|
||||
return "", errors.New("unhandled")
|
||||
break
|
||||
case "*":
|
||||
return "", errors.New("unhandled")
|
||||
break
|
||||
case "/":
|
||||
return "", errors.New("unhandled")
|
||||
break
|
||||
case "//":
|
||||
return "", errors.New("unhandled")
|
||||
break
|
||||
}
|
||||
return "", errors.New("internal coding error") // xxx libify
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue