Abstract syntax tree for excel formulas
npm install excel-formula-astAbstract syntax tree for excel formulas.
npm install excel-formula-ast -S
or
yarn add excel-formula-ast
``js
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});number is ${numberNode.value}
},
enterNumber(numberNode) {
console.log()
}
};
// send visitor through tree
visit(tree, visitor);
// prints:
// function is SUM
// number is 1
// number is 2
`
`js`
const {buildTree, visit} = require('excel-formula-ast');
Build expression tree from tokens.
- tokens: Array of objects - Tokens from excel-formula-tokenizer (github | npm)
Returns: ast node
Send a visitor through the tree nodes.
- tree: ast node
- visitor: object
#### visitor
Visitor is an object with any of these function properties:
`js
{
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''A1'
- key: string - Excel cell number. Example: 'relative' | 'mixed' | 'absolute'
- refType: string -
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