Angu:构建与评估迷你语言的最佳实践

Angu:构建与评估迷你语言的最佳实践

angu A small DSL/interpreter that can be used to evaluate simple expressions angu 项目地址: https://gitcode.com/gh_mirrors/an/angu

1. 项目介绍

Angu 是一个轻量级、零依赖的库,适用于在浏览器或 NodeJS 中构建和评估迷你语言。它允许开发者完全控制每一个操作,同时处理解析等繁琐细节。Angu 支持 TypeScript 类型定义(使用可选)。通过 Angu,我们可以创建简单的浏览器内计算器,评估类似 10 + 4 / 2 * (3 - 1) 的表达式,或者构建类似表格单元格操作的小型表达式语言。

2. 项目快速启动

首先,您需要安装 Angu。可以使用 npm 来安装最新版本:

npm install angu

然后,定义一个 Context 对象来决定表达式如何被评估。对于一个简单的计算器,您可以定义如下:

import { evaluate } from 'angu';

const ctx = {
  // 提供以下操作符:
  scope: {
    '-': (a, b) => a.eval() - b.eval(),
    '+': (a, b) => a.eval() + b.eval(),
    '/': (a, b) => a.eval() / b.eval(),
    '*': (a, b) => a.eval() * b.eval(),
  },
  // 定义操作符优先级
  precedence: [
    ['/','*'],
    ['-','+']
  ]
};

// 使用定义的上下文评估表达式
const r1 = evaluate('2 + 10 * 4', ctx);
console.log(r1.value); // 输出:42

若需要在评估时提供局部变量,您可以这样做:

const r1 = evaluate('2 + 10 * four', ctx, { four: 4 });
console.log(r1.value); // 输出:42

如果评估提供的字符串时出现错误,将会返回一个错误对象,其中包含位置信息。

3. 应用案例和最佳实践

案例一:简单的浏览器内计算器

// 定义上下文
const ctx = {
  // ...(此处省略上下文定义,与上文相同)
};

// 评估表达式
const result = evaluate('3 + 5 * 2', ctx);
console.log(result.value); // 输出:13

案例二:表格操作

// 定义上下文,包括自定义函数
const ctx = {
  // ...(此处省略上下文定义,与上文相同)
  scope: {
    ...ctx.scope,
    MEAN: (a, b) => (a.eval() + b.eval()) / 2,
    SUM: (a, b) => a.eval() + b.eval()
  }
};

// 评估表达式
const result = evaluate('MEAN(A1:A5) + SUM(C1:D2) - 10', ctx);
console.log(result.value); // 输出取决于 A1:A5 和 C1:D2 的值

最佳实践

  • 保持上下文简单,仅定义必要的操作符和函数。
  • 为操作符和函数提供清晰的命名,以增强代码的可读性。
  • 在评估表达式前,确保所有变量都已经定义。

4. 典型生态项目

Angu 作为一个小型的表达式评估库,可以集成到更大的项目中,例如:

  • 数据处理工具,用于动态计算数据。
  • 游戏开发,用于在游戏中实时计算属性值。
  • 任何需要动态解析用户输入并执行计算的应用。

Angu 的轻量级和灵活性使其成为需要在项目中嵌入小型语言解析和计算功能时的理想选择。

angu A small DSL/interpreter that can be used to evaluate simple expressions angu 项目地址: https://gitcode.com/gh_mirrors/an/angu

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

平列金Hartley

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值