感觉分析器
用于分析感觉的库(亲切的表达语言)表达式.
安装
npm install @bpmn-io/feel-analyzer
使用量
要开始,请创建 FeelAnalyzer 实例:
import { FeelAnalyzer } from '@bpmn-io/feel-analyzer';
const analyzer = new FeelAnalyzer();
分析用于提取输入变量的感觉表达式 :
const result = analyzer.analyzeExpression('x + y');
console.log(result.valid); // true
console.log(result.inputs);
// [
// { name: 'x' },
// { name: 'y' }
// ]
配置感官方言( 表达式或无函数测试) :
const analyzer = new FeelAnalyzer({
dialect: 'unaryTests' // defaults to 'expression'
});
建筑
你可以提供 builtins 财务报告和审定财务报表 reservedNameBuiltins 将内置名称排除在输入检测之外。 使用 @camunda/feel-builtins 提供这些:
import { FeelAnalyzer } from '@bpmn-io/feel-analyzer';
import { builtins, reservedNameBuiltins } from '@camunda/feel-builtins';
const analyzer = new FeelAnalyzer({
dialect: 'expression',
parserDialect: 'camunda',
builtins,
reservedNameBuiltins
});
const result = analyzer.analyzeExpression('sum(orders.amount) > 100');
console.log(result.inputs);
// [
// {
// name: 'orders',
// type: 'List',
// entries: [
// { name: 'amount' }
// ]
// }
// ]
输入变量
分析器会取出带有类型信息的输入变量,包括嵌入结构. 数据模型与 变量解析器数字 :
const result = analyzer.analyzeExpression('person.name = "John" and scores[1] > 10');
console.log(result.inputs);
// [
// {
// name: 'person',
// type: 'Context',
// entries: [
// { name: 'name' }
// ]
// },
// {
// name: 'scores',
// type: 'List'
// }
// ]
启动函数
分析器从表达式中提取出所有函数引用,按名称排序并被去重复. 每个功能被归类为: builtin 或者说 user 根据所提供的 builtins 列表 :
import { FeelAnalyzer } from '@bpmn-io/feel-analyzer';
import { camundaBuiltins, camundaReservedNameBuiltins } from '@camunda/feel-builtins';
const analyzer = new FeelAnalyzer({
parserDialect: 'camunda',
builtins: camundaBuiltins,
reservedNameBuiltins: camundaReservedNameBuiltins
});
const result = analyzer.analyzeExpression('from json(sum(myHelper(x)))');
console.log(result.functions);
// [
// { name: 'from json', type: 'builtin' },
// { name: 'myHelper', type: 'user' },
// { name: 'sum', type: 'builtin' }
// ]
分析已铺设的树
如果您已经拥有一个解析语法树—— 例如来自使用相同解析器的 CodeMirror 编辑器—— 您可以直接用它进行分析 analyzeTree,避免重复分析:
const analyzer = new FeelAnalyzer();
const expression = 'x + y';
const tree = analyzer.parser.parse(expression);
const result = analyzer.analyzeTree(tree, expression);
树必须来自与分析器一致配置的剖析器( 相同) dialect, (中文(简体) ), parserDialect,以及 reservedNameBuiltins——如规定 analyzer.parser。用不同的配置解析的树可能会产生不正确的结果.
相关
- @bpmn-io/lezer-feel (英语) - 感觉语言定义 勒泽 解析器系统
许可证
麻省理工学院