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 2
const {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