Abstract syntax tree for excel formulas.
npm install excel-formula-ast -S
or
yarn add excel-formula-ast
const {tokenize} = require('excel-formula-tokenizer');
const {buildTree, visit} = require('excel-formula-ast');
const formula = 'SUM(1, 2)';
const tokens = tokenize(formula);
// build tree
const tree = buildTree(tokens);
// create visitor for parts of tree you're interested in
const visitor = {
enterFunction(functionNode) {
console.log(`function is ${functionNode.name}`);
},
enterNumber(numberNode) {
console.log(`number is ${numberNode.value}`)
}
};
// send visitor through tree
visit(tree, visitor);
// prints:
// function is SUM
// number is 1
// number is 2const {buildTree, visit} = require('excel-formula-ast');Build expression tree from tokens.
Returns: ast node
Send a visitor through the tree nodes.
- tree: ast node
- visitor: object
Visitor is an object with any of these function properties:
{
enterCell(node) {},
exitCell(node) {},
enterCellRange(node) {},
exitCellRange(node) {},
enterFunction(node) {},
exitFunction(node) {},
enterNumber(node) {},
exitNumber(node) {},
enterText(node) {},
exitText(node) {},
enterLogical(node) {},
exitLogical(node) {},
enterBinaryExpression(node) {},
exitBinaryExpression(node) {},
enterUnaryExpression(node) {},
exitUnaryExpression(node) {}
}For any node type Foo
enterFoo()is called when the visitor gets to a Foo node.exitFoo()is called when the visitor has visited all of the Foo's child nodes (if any) and is leaving the Foo.
Passed to visitor methods: enterCell, exitCell
Properties:
- type: string -
'cell' - key: string - Excel cell number. Example:
'A1' - refType: string -
'relative' | 'mixed' | 'absolute'
Passed to visitor methods: enterCellRange, exitCellRange
Properties:
- type: string -
'cell-range' - left: cell node
- right: cell node
Passed to visitor methods: enterFunction, exitFunction
Properties:
- type: string -
'function' - name: string - function name
- arguments: Array of node
Passed to visitor methods: enterNumber, exitNumber
Properties:
- type: string -
'number' - value: number
Passed to visitor methods: enterText, exitText
Properties:
- type: string -
'text' - value: string
Passed to visitor methods enterLogical, exitLogical
Properties:
- type: string -
'logical' - value: boolean
Passed to visitor methods: enterBinaryExpression, exitBinaryExpression
Properties:
- type: string -
binary-expression - operator: string
- left: node
- right: node
Passed to visitor methods: enterUnaryExpression, exitUnaryExpression
Properties:
- type: string -
'unary-expression' - operator: string
- operand: node
MIT