编程语言语法优化设计

0 浏览
0 试用
0 购买
Nov 16, 2025更新

本提示词专为编程语言语法优化场景设计,通过系统化的语法分析、结构优化和示例生成,帮助开发者打造简洁易用且功能强大的编程语言。提示词采用分步工作流程,从语法诊断到优化方案生成,确保语法一致性和用户体验提升。适用于个人理财编程语言、教育编程工具及领域特定语言等多种场景,提供专业的语法规则设计、使用示例和注意事项输出。

MoneyScript 优化语法设计文档

以下为针对现有 MoneyScript 语言的完整语法优化方案,面向理财入门用户,重点提升一致性、可读性与可学习性,同时保持语法的简洁与功能平衡。


1. 优化后的语法规则(分层次详细说明)

  • 总体原则
    • 关键词统一小写
    • 赋值统一使用 "="
    • 日期统一使用 ISO 格式 "YYYY-MM-DD",月份使用 "YYYY-MM"
    • 金额默认使用正数,方向用关键字 "in"/"out"
    • 注释统一:行注释为 "// ...",块注释为 "/* ... */"
    • 标识符(账户、类目等)支持 Unicode,无空格;如需包含空格,使用反引号包裹:"储蓄账户A" → 使用 `储蓄账户A`
    • 类型系统:Money(precision=2,默认两位小数)、Currency(ISO 4217)、Category
    • 跨币种操作需显式汇率 fx,禁止隐式换算

1.1 词法要素

  • IDENT: Unicode 字母/数字/下划线组合(不含空格),如 现金, 食品, 储蓄_1
  • NAME: IDENT | 反引号包裹的任意非换行文本(允许空格与中文),如 储蓄 账户A
  • DATE: YYYY-MM-DD(如 2025-03-06)
  • MONTH: YYYY-MM(如 2025-03)
  • MONEY: 整数或小数(最多两位小数,默认 precision=2),如 45.50, 200
  • CURRENCY: ISO 4217 代码,如 CNY, USD
  • STRING: 双引号包裹的文本,如 "早餐"

1.2 顶层结构

  • program := statement*
  • statement ∈ { settings | account | category | transaction | transfer | budget | recurring | query } | comment

1.3 设置(可选)

  • settings 用于设定全局默认值与校验策略
  • 语法:
    • settings default_currency=CNY money_precision=2 locale=zh-CN
    • 可选键:default_currency, money_precision, locale
  • 约束:
    • money_precision ∈ {0..4},默认=2

1.4 账户声明

  • account NAME type=(asset|liability) currency=CURRENCY [note=STRING]
  • 示例:account 现金 type=asset currency=CNY
  • 约束:
    • 每个账户必须声明 currency
    • 账户名称全局唯一

1.5 类目声明

  • category NAME [tax=PERCENT] [note=STRING]
  • 示例:category 食品 tax=0.06
  • 约束:
    • tax 范围 [0,1],表示税率(如 0.06)

1.6 交易记录(收入/支出)

  • transaction DATE (in|out) account=NAME category=NAME amount=MONEY [note=STRING]
  • 示例(支出):transaction 2025-03-05 out account=现金 category=食品 amount=45.5 note="早餐"
  • 示例(收入):transaction 2025-03-10 in account=现金 category=工资 amount=8500
  • 约束:
    • 金额为正数;方向决定收支(in=收入,out=支出)
    • 交易货币继承自账户的 currency,不可覆盖
    • 禁止负数金额

1.7 转账(账户间资金划转)

  • transfer DATE from=NAME to=NAME amount=MONEY [fx=RATE base=CURRENCY quote=CURRENCY [fx_date=DATE]] [note=STRING]
  • 示例(同币种):transfer 2025-03-06 from=现金 to=储蓄 amount=200
  • 示例(跨币种,显式汇率):transfer 2025-03-07 from=美元卡 to=储蓄 amount=100 fx=7.12 base=USD quote=CNY fx_date=2025-03-07
  • 约束:
    • 同币种转账无需 fx
    • 跨币种必须提供 fx、base、quote;fx 表示 1 base = fx quote
    • 金额为正数

1.8 预算

  • budget MONTH category=NAME limit=MONEY rollover=(on|off) [note=STRING]
  • 示例:budget 2025-03 category=食品 limit=800 rollover=on
  • 约束:
    • limit 为正数
    • rollover=on 表示结转未用完额度到下一月;off 表示不结转

1.9 重复规则(Recurring)

  • recurring NAME { monthly on=DAY flow=(in|out) account=NAME category=NAME amount=MONEY start=DATE [end=DATE] [note=STRING] }
  • 示例:
    • recurring 房租 { monthly on=10 flow=out account=现金 category=住房 amount=2500 start=2025-01-01 }
  • 约束:
    • DAY ∈ [1..28](避免月末差异带来歧义;如需 29-31,建议使用 end 对齐策略或明确 skip)
    • 系列实例生成时继承账户货币
    • start 必填,end 可选;end 缺省表示无限期

1.10 查询子语言(Query)

  • 独立子语言,查询只读、不产生记录
  • 语法(简化版):
    • query select sum(amount) where month=MONTH [and category=NAME] [and account=NAME] [and flow=(in|out)]
    • query select count(transaction) where category=NAME
    • query select amount where date=DATE and account=NAME
    • query select sum(amount) by category where month=MONTH and flow=out
  • 支持的函数与字段:
    • 函数:sum(amount), count(transaction)
    • 字段:date, month, account, category, amount, flow
    • 过滤:=、in (...)、between DATE and DATE(扩展语法见下)
  • 约束:
    • 所有关键词小写
    • 只读,无副作用

1.11 注释

  • // 行注释
  • /* 块注释 */

2. 语法使用示例(基础到高级)

  • 设置与基础声明

    • settings default_currency=CNY money_precision=2
    • account 现金 type=asset currency=CNY
    • account 储蓄 type=asset currency=CNY note="定期存款"
    • account 美元卡 type=asset currency=USD
    • category 食品 tax=0.06
    • category 工资
    • category 住房
  • 基本交易与转账

    • transaction 2025-03-05 out account=现金 category=食品 amount=45.5 note="早餐"
    • transaction 2025-03-10 in account=现金 category=工资 amount=8500
    • transfer 2025-03-06 from=现金 to=储蓄 amount=200
    • transfer 2025-03-07 from=美元卡 to=储蓄 amount=100 fx=7.12 base=USD quote=CNY fx_date=2025-03-07
  • 预算

    • budget 2025-03 category=食品 limit=800 rollover=on
    • budget 2025-03 category=住房 limit=3000 rollover=off
  • 重复规则(每月房租)

    • recurring 房租 { monthly on=10 flow=out account=现金 category=住房 amount=2500 start=2025-01-01 }
  • 查询(入门)

    • query select sum(amount) where month=2025-03 and category=食品 and flow=out
    • query select sum(amount) by category where month=2025-03 and flow=out
    • query select count(transaction) where month=2025-03
  • 查询(稍进阶)

    • // 指定账户的月度收入总额
    • query select sum(amount) where month=2025-03 and account=现金 and flow=in
    • // 按类别分组查看支出
    • query select sum(amount) by category where month=2025-03 and flow=out

3. 语法特性对比(优化前后对比分析)

  • 赋值符号

    • 原:同时使用 "=" 与 ":"
    • 新:统一为 "=",例如 tax=0.06、limit=3000、rollover=on
  • 日期格式

    • 原:混用 "YYYY-MM-DD" 与 "YYYY/M/D"
    • 新:强制 "YYYY-MM-DD",月份为 "YYYY-MM"
  • 金额方向

    • 原:支出用负数、收入用正数,语法未强制
    • 新:金额始终为正数;方向用 in/out 明确
  • 记录与查询

    • 原:tx 与 report 混杂、大小写不一致
    • 新:记录统一使用 transaction;查询独立为 query 子语言,全部小写关键词
  • 类型系统与跨币种

    • 原:未明确类型与跨币种校验
    • 新:Money(precision=2)、Currency、Category;跨币种必须显式 fx、base、quote
  • 重复规则与预算

    • 原:无重复规则;预算语法不统一
    • 新:recurring 块结构;budget 统一使用 "=",rollover=on|off
  • 注释与缩进风格

    • 原:有 // 与 /* */,无风格约束
    • 新:注释风格保留并规范;建议 2 空格缩进(见最佳实践)

4. 使用注意事项和最佳实践建议

  • 命名与一致性

    • 关键词统一小写;标识符尽量使用不含空格的 Unicode 名称,必要时用反引号包裹
    • 账户与类目名称全局唯一,建议与现实一致(如 现金、储蓄、工资、食品)
  • 日期与月份

    • 始终使用 "YYYY-MM-DD";月份聚合使用 "YYYY-MM"
    • recurring monthly on 的日期建议设置在 [1..28],避免 29/30/31 带来生成差异
  • 金额与方向

    • 金额永远为正数;使用 in/out 表达方向
    • 避免混淆:收入用 in,支出用 out;转账不需要 in/out
  • 跨币种转账

    • 必须提供 fx、base、quote;fx_date 可选但建议与交易日期一致
    • fx 的含义:1 base = fx quote
  • 预算与结转

    • rollover=on 用于连续预算控制;off 强调每月独立预算
    • 类目预算与实际支出分类保持一致,否则查询结果可能失真
  • 注释与代码风格

    • 使用 // 进行短注释、/* ... */ 进行块说明
    • 建议每条语句一行;块结构(recurring)内部使用 2 空格缩进
  • 校验与错误消息模板(建议)

    • E101 DateFormatError: Expected 'YYYY-MM-DD', got '2025/3/05' at line X
    • E201 AmountSignError: Amount must be positive; use 'in'/'out' to set direction at line X
    • E301 CurrencyMismatch: Cross-currency transfer requires fx/base/quote at line X
    • E401 UnknownIdentifier: Unknown account '...' at line X
    • E402 DuplicateDeclaration: 'account 储蓄' declared twice at line X
    • E501 QuerySyntaxError: Unexpected token '...' in query at line X

5. 扩展性设计和未来优化方向

  • 语义扩展

    • 类目层级:category 住房:租金 支持层级分类与聚合
    • 标签系统:为交易添加 tags=... 支持多维分析
    • 账户属性扩展:interest_rate、credit_limit、opening_balance 等
  • 查询语言增强

    • 支持 group by、order by、limit
    • 支持 between、in(...)、regex 匹配等更丰富条件
    • 导出格式控制:query ... output=csv/json
  • 时间规则扩展

    • recurring 支持 weekly on=Mon、yearly on=MM-DD、工作日调整策略(如 holiday_shift=prev_business_day)
  • 汇率与外汇

    • 引入 fx table 与引用:fx USD/CNY=7.12 on 2025-03-07;transfer 使用 fxref=...
    • 汇率源与缓存策略配置
  • 合规与税务

    • 税规则扩展:支持含税/未税金额、自动税额计算字段
    • 预算滚动策略与周期多样化(quarterly, yearly)

附录:核心 EBNF 片段

  • 词法

    • IDENT := [\p{L}\p{N}_]+
    • NAME := IDENT | '' (~'')* '`'
    • DATE := DIGIT DIGIT DIGIT DIGIT '-' DIGIT DIGIT '-' DIGIT DIGIT
    • MONTH := DIGIT DIGIT DIGIT DIGIT '-' DIGIT DIGIT
    • MONEY := DIGIT+ ('.' DIGIT{1,2})?
    • CURRENCY := [A-Z]{3}
    • STRING := '"' (~'"')* '"'
    • PERCENT := '0' ('.' DIGIT+)? | '1' ('.' '0'+)?
  • program := statement*

  • statement := settings | account | category | transaction | transfer | budget | recurring | query

  • settings := 'settings' ( 'default_currency' '=' CURRENCY | 'money_precision' '=' DIGIT | 'locale' '=' IDENT )+

  • account := 'account' NAME 'type' '=' ('asset'|'liability') 'currency' '=' CURRENCY ( 'note' '=' STRING )?

  • category := 'category' NAME ( 'tax' '=' PERCENT )? ( 'note' '=' STRING )?

  • transaction := 'transaction' DATE ('in'|'out') 'account' '=' NAME 'category' '=' NAME 'amount' '=' MONEY ( 'note' '=' STRING )?

  • transfer := 'transfer' DATE 'from' '=' NAME 'to' '=' NAME 'amount' '=' MONEY ( 'fx' '=' MONEY 'base' '=' CURRENCY 'quote' '=' CURRENCY ( 'fx_date' '=' DATE )? )? ( 'note' '=' STRING )?

  • budget := 'budget' MONTH 'category' '=' NAME 'limit' '=' MONEY 'rollover' '=' ('on'|'off') ( 'note' '=' STRING )?

  • recurring := 'recurring' NAME '{' 'monthly' 'on' '=' DIGIT+ 'flow' '=' ('in'|'out') 'account' '=' NAME 'category' '=' NAME 'amount' '=' MONEY 'start' '=' DATE ( 'end' '=' DATE )? ( 'note' '=' STRING )? '}'

  • query := 'query' 'select' ( 'sum' '(' 'amount' ')' ( 'by' field )? | field_list ) ( 'where' condition ( 'and' condition )* )?

  • field := 'amount' | 'category' | 'account' | 'date' | 'month' | 'flow'

  • field_list := field ( ',' field )*

  • condition := field '=' ( NAME | DATE | MONTH | STRING | ('in' '(' NAME (',' NAME)* ')' ) )


本方案严格统一符号与大小写、强化日期与金额规则、分离查询子语言,并引入类型与校验机制,确保入门用户易学易用,同时为后续扩展留出充足空间。

TeachLang(优化版)语法规则

以下为面向教育编程场景的 TeachLang 优化语法。目标是:初学者友好、语义直观、规则统一且简洁。采用“缩进表示层级 + 必须使用 end 明确块结束”的结构;关键字统一为小写中文;比较符只保留 ==!=,赋值使用 =;字符串统一使用双引号;提供跟踪与断言指令。

1. 词法与基本约束

  • 文件编码:UTF-8
  • 行结束:一行一条语句;不使用分号
  • 缩进:
    • 使用 2 空格缩进,不允许 Tab
    • 每个块体内缩进必须一致
  • 标识符:以字母或下划线开头,包含中文、英文、数字、下划线,例如:分数, avg_1
  • 数字:整数与小数(十进制),如 42, 3.14
  • 布尔:
  • 字符串:仅支持双引号,支持转义 \"\\\n
  • 注释:以 ; 起始,至行尾,例如:; 这是注释

2. 关键字与操作符

  • 关键字(小写中文,保留字):输出否则循环函数返回检查跟踪步长end
  • 比较符:==!=><>=<=
  • 逻辑:
  • 赋值:=
  • 算术:+-*/%(取余)

3. 语句层级(分层规则)

3.1 赋值与表达式

  • 赋值:设 变量 = 表达式
  • 表达式可包含:数字、字符串、布尔、变量、算术/比较/逻辑运算、函数调用、列表/范围/索引
  • 字符串连接:使用 +,如 "你好, " + 名字

3.2 输出

  • 打印:输出 表达式
  • 示例:输出 "你好"

3.3 断言与跟踪

  • 断言(检查条件,否则抛错):检查 表达式
    • 表达式为布尔;为假时报告错误并停止执行
  • 跟踪(交互式步骤跟踪开关):
    • 开:跟踪 开
    • 关:跟踪 关
    • 说明:打开后,解释器逐行显示执行语句与关键变量变化

3.4 条件

  • If-Else:
若 条件
  语句...
否则
  语句...
end
  • 否则可省略,但 end 必须存在

3.5 循环(两种基础形式)

  • 计数循环(含范围与可选步长,范围为闭区间):
循环 i 从 起 到 止
  语句...
end
  • 指定步长:
循环 i 从 起 到 止 步长 s
  语句...
end
  • 条件循环(相当于 while):
循环 当 条件
  语句...
end

3.6 函数

  • 定义与返回:
函数 名称(参数1, 参数2, ...)
  语句...
  返回 表达式
end
  • 调用:名称(实参1, 实参2, ...)

3.7 列表与范围、索引

  • 列表字面量:[1, 2, 3]
  • 范围字面量(闭区间):1..5,通常与循环一起使用
  • 赋值列表:设 a = [1, 2, 3, 4, 5]
  • 索引:a[索引](索引从 1 开始)
  • 切片:a[起..止](含起含止)

3.8 标准库(教育场景精选)

  • 排序(列表):返回升序新列表(不修改原列表)
  • 平均数(列表):返回数值平均值
  • 词频统计(列表):返回由二元列表组成的新列表,例如:[["a", 3], ["b", 2]]

注:为保持简单性,不引入字典类型;若需键值对,请使用二维列表 [[键, 值], ...]


语法使用示例

1. 基础:变量、输出、算术

输出 "你好"
设 x = 3
设 y = x * 2
输出 "y = " + y

2. 条件

设 x = 3
若 x > 2
  输出 x
否则
  输出 "不大于 2"
end

3. 计数循环、条件循环

循环 i 从 1 到 5
  输出 i
end

设 i = 1
循环 当 i <= 5
  输出 i
  设 i = i + 1
end

4. 列表、索引、切片

设 a = [1, 2, 3, 4, 5]
输出 a[1]        ; 输出第一个元素:1
输出 a[2..4]     ; 输出子列表:[2, 3, 4]

5. 函数与返回

函数 加(a, b)
  返回 a + b
end

输出 加(3, 4)

6. 跟踪与断言

跟踪 开
设 x = 5
检查 x > 0
设 x = x - 2
输出 "x 现在为 " + x
跟踪 关

7. 标准库示例:平均数、排序、词频统计

设 列表 = [3, 1, 4, 1, 5]

输出 "平均数 = " + 平均数(列表)
输出 "排序后 = " + 排序(列表)

设 词列表 = ["a", "b", "a", "c", "b", "a"]
设 统计 = 词频统计(词列表)

循环 i 从 1 到 长度(统计)
  设 对 = 统计[i]          ; 对为二元列表 [词, 次数]
  输出 对[1] + ": " + 对[2]
end

注:示例使用了 长度 内建函数(返回列表元素个数)。


语法特性对比(优化前后对比分析)

  • 结构与结束:

    • 旧:End 与缩进并存且可省略,导致混淆
    • 新:缩进表示层级,所有多行块必须以 end 显式结束,禁止省略
  • 关键字统一性:

    • 旧:大小写不统一(如 print/Print),中英混用
    • 新:统一小写中文关键字:输出循环函数返回检查跟踪end
  • 比较与赋值:

    • 旧:比较支持 ===
    • 新:比较仅 ==!=;赋值仅 =
  • 字符串:

    • 旧:单引号/双引号混用
    • 新:仅双引号,避免初学者困惑
  • 数组/列表:

    • 旧:a[1..5] = {1,2,3,4,5} 风格混杂
    • 新:列表统一为 [1,2,3,4,5],范围使用 1..5,索引与切片语义清晰(1 基)
  • 调试能力:

    • 旧:无明确的调试开关与断言
    • 新:跟踪 开/关 提供交互式步骤跟踪,检查 提供断言与友好错误

使用注意事项与最佳实践

  • 缩进与块结束:

    • 使用 2 空格缩进;禁止 Tab
    • 每个多行块必须以 end 结束(包括 循环函数
  • 赋值与比较:

    • 赋值用 =;相等比较用 ==
    • 若写成 设 x == 3 会报错:应为 设 x = 3
  • 字符串:

    • 始终使用双引号成对出现;避免混用单引号
    • 需要双引号内部双引号时使用转义 \"
  • 索引与范围:

    • 列表索引从 1 开始;a[1] 为首元素
    • 切片范围为闭区间;a[2..4] 含 2 与 4
  • 循环选择:

    • 明确循环意图:计数循环用 循环 i 从 起 到 止;条件循环用 循环 当 条件
    • 需要非 1 步长时使用 步长 s
  • 函数返回:

    • 函数内最后使用 返回;无返回值函数可省略 返回
  • 调试与断言:

    • 出现逻辑不确定时打开 跟踪
    • 对关键条件使用 检查 以便在出错时获得明确提示

扩展性设计与未来优化方向

  • 语法层面可扩展点:

    • 字典类型与字面量:例如 {键: 值, ...},与现有二维列表兼容
    • 遍历 语法糖:循环 每个 元素 在 列表
    • 模块与导入:导入 模块名,用于标准库扩展(排序、统计、可视化)
    • 输入/输出增强:输入 提示语 取得用户输入
  • 类型与工具:

    • 可选类型提示:设 x: 数字 = 0(保留向后兼容的动态类型)
    • 静态检查与 Lint:检测未使用变量、潜在逻辑错误
    • 教学提示模式:在报错时提供学习资源链接
  • 标准库拓展:

    • 统计学:中位数方差标准差
    • 字符串处理:分割拼接替换
    • 可视化:简单柱状图/折线图(面向教学)

错误提示模板(示例)

  • 赋值/比较混淆:

    • 第 4 行:发现 == 用于赋值
    • 代码:设 x == 3
    • 建议:使用 = 进行赋值,例如 设 x = 3
  • 未关闭字符串:

    • 第 2 行:字符串未关闭
    • 代码:输出 "你好
    • 建议:使用成对双引号,例如 输出 "你好"
  • 缩进不一致:

    • 第 5 行:缩进不一致(期望 2 个空格)
    • 建议:统一使用 2 空格缩进;不要使用 Tab
  • 缺少 end

    • 第 7 行: 块未以 end 结束
    • 建议:在块末尾添加 end
  • 未知关键字或大小写错误:

    • 第 1 行:未知标识符 Print
    • 建议:使用中文关键字 输出

以上优化方案严格遵循“语法一致、逻辑严谨、简洁易用”的基本原则,面向初学者的教育编程场景,兼顾表达能力与易学性。

优化后的语法规则(DataFlow v2 规范)

目标:面向分析师与数据工程师的稳健 DSL,统一数据流式语义、空值处理、时间与时区、可审计性与可维护性。

核心设计原则:

  • 显式链式:强制使用管道操作符 |>,所有步骤显式连接。
  • 类型与模式先行:数据源接受 schema 明确声明,可选择推断但需记录为元数据。
  • 一致的空值语义:唯一的空值常量 null,提供 null-safe 比较与空值合并。
  • 时间一致性:全局 timezone 与可控解析,时间函数与时区一致。
  • 可审计性:可生成等效 SQL/计划,错误提示可指向具体子句。
  • 无二义性:去除二义性操作符,统一关键字与表达式优先级。

——

分层规则如下。

  1. 词法与字面量
  • 标识符:由字母/数字/下划线组成,不能以数字开头。保留字需使用反引号包裹,如 group
  • 字符串常量:使用单引号,例如 'Asia/Shanghai'、'北区'、'2025-01-01'。
  • 数字常量:int、decimal(支持 123.45)。
  • 布尔常量:true/false。
  • 空值常量:null(唯一空值记号)。
  • 注释:-- 行注释;/* ... */ 块注释。
  1. 类型系统与模式声明
  • 基本类型:bool, int, bigint, decimal(p,s), double, string, date, timestamp, interval。
  • 模式声明:schema { col: type, ... },示例: schema { date: date, item: string, qty: int, price: decimal(10,2) }
  • 显式与推断:source 支持 with infer_schema true/false;显式 schema 优先于推断。
  • 强制转换:expr :: type,例如 '2025-01-01'::date。
  1. 全局设置与会话
  • 设置语句:
    • set timezone 'Asia/Shanghai'
    • set sql_dialect 'ansi' // 影响 explain sql 方言
  • 时区:用于 timestamp 解析与时间函数;数据源可覆盖但必须记录在元数据中。
  • Null 读入策略:在 source 层配置 null_as 列表,将命中值读取为 null。
  1. 运算符与表达式
  • 比较运算:=, !=, >, >=, <, <=
    • 移除 ==,出现时报错并建议改为 =
  • Null-safe 比较:=?
    • a =? b 等价于 (a = b) 或 (a is null and b is null)
  • 逻辑:and, or, not;短路求值。
  • 其他空值语法:is null, is not null, coalesce(a, b, ...)
  • 算术:+, -, *, /;对空值参与运算结果为 null(除 coalesce 后)。
  • 函数(选摘):date_parse(s, fmt [, tz]), to_date(s [, fmt]), to_timestamp(s [, fmt, tz]), now(), date_add(d, interval '7' day), lag(x, k, default), lead(...), nvl 别名到 coalesce。
  1. 管道与求值模型
  • 管道:dataset |> step1 |> step2 ...
  • 左结合,左侧数据集作为右侧变换的隐式第一个参数。
  • 每个 step 返回数据集(或元数据),直到 sink(write/save/plot)或 explain。
  1. 数据源与接收器
  • 读取:source [with ] [schema {...}]
    • CSV:source csv 'sales.csv' with delim ',', header true, encoding 'utf-8', null_as ['NA',''], tz 'Asia/Shanghai'
    • 其他:json/parquet/sql(table='orders') 等(保留扩展点)
  • 写出:write [with ]
    • write csv 'out.csv' with header true, encoding 'utf-8'
  • 逻辑保存:save as // 保存为可复用的逻辑视图(缓存可选)
  • 缓存:cache [as ] [storage memory|disk] // 命中时优先使用
  1. 选择、派生、过滤
  • select:投影与重命名
    • select col, expr as alias, *
    • 规则:同一 select 子句中,后项不能引用前面刚起的别名(避免顺序依赖);需使用 derive。
  • derive:新增/覆盖列
    • derive new_col = expr [, ...]
    • 覆盖时需显式关键字 replace:derive replace qty = coalesce(qty, 0)
  • filter:过滤
    • filter expr
    • 支持 null-safe:filter region =? '北区'
  1. 排序、限制
  • order by col [asc|desc] [nulls first|last]
  • limit n [offset m]
  1. 分组与聚合
  • 统一语法: group by key1, key2 aggregate sum(qty) as total_qty, avg(price) as avg_price
  • 规则:
    • 聚合别名必须唯一,且不得与 group by 键冲突(如冲突报错,建议使用 rename 步骤)。
    • 聚合函数支持:sum, avg, min, max, count, count_distinct, any_value 等。
  1. 窗口分析
  • 在 derive 或 select 中使用 over 子句:
    • derive qty_7d = sum(qty) over by item order date rows 7
    • 语法:(expr) over [by ] [order <ts_col>] [rows N|range interval '7' day]
  • 常用窗口函数:sum, avg, min, max, count, row_number(), lag(x, k, default), lead(...), dense_rank()
  1. 连接
  • 语法:
    • join [inner|left|right|full] <dataset_or_name> on [with suffixes ['_l','_r']]
    • 默认 inner;支持 using(key) 简写:join left orders using(item_id)
  • 别名与冲突:
    • 冲突列名按 suffixes 规则处理;未指定时默认 ['_left','_right']。
    • 可使用限定名 left.col/right.col 或 .col
  1. 采样与重现性
  • sample bernoulli [seed ] [repeatable]
    • sample bernoulli 0.1 seed 42 repeatable
  • sample rows [seed ] // 保证随机且可复现
  1. 可视化
  • plot x= y= [color=] [facet=] [title='...'] [width=... height=...]
    • 类型:line, bar, scatter, area
    • 输出:plot ... |> write png 'chart.png'(或在交互环境中内联渲染)
  1. 审计与优化
  • explain sql // 输出等效 SQL(遵循 set sql_dialect)
  • explain plan // 输出逻辑/物理执行计划
  • validate // 执行静态检查:空值策略、时区、别名冲突、未解析列等
  1. 错误与诊断(示例)
  • 使用 == 时:E1001: Operator '==' is not supported. Use '=' or '=?' for null-safe equality.
  • 聚合别名冲突:E2103: Alias 'item' collides with group key. Rename or change alias.
  • 未指明时区进行 timestamp 解析:W1302: Parsing timestamp without timezone. Consider set timezone 'Asia/Shanghai'.
  1. 保留字(选摘)
  • select, derive, filter, group, aggregate, window, over, by, order, rows, range, join, on, using, left, right, full, inner, save, cache, write, source, schema, with, set, explain, sample, plot, limit, offset, null, true, false

——

语法使用示例(基础到高级)

示例 1:基础读取、筛选、聚合并保存

set timezone 'Asia/Shanghai'

source csv 'sales.csv'
  with delim ',', header true, encoding 'utf-8', null_as ['NA', '']
  schema { date: date, item: string, region: string, qty: int, price: decimal(10,2) }
|> filter date >= '2025-01-01' and region = '北区'
|> group by item aggregate
     sum(qty) as total_qty,
     avg(price) as avg_price
|> order by total_qty desc
|> save as daily_sales

示例 2:空值与 null-safe 比较、一致的别名规则

source csv 'customers.csv'
  with header true, encoding 'utf-8', null_as ['NA']
  schema { id: string, region: string, tier: string }
|> filter tier =? 'gold'  -- tier 与 'gold' 同为 null 时视为相等
|> select id, coalesce(region, '未填') as region, tier

示例 3:7 日滚动窗口销量

source csv 'sales.csv'
  with header true
  schema { date: date, item: string, qty: int }
|> derive
     qty_7d = sum(qty) over by item order date rows 7,
     qty_lag1 = lag(qty, 1, 0) over by item order date
|> select date, item, qty, qty_lag1, qty_7d

示例 4:连接订单明细,处理列名冲突

let sales =
  source csv 'sales.csv'
    with header true
    schema { item_id: string, date: date, qty: int }

let orders =
  source sql table='orders'
    schema { item_id: string, region: string, price: decimal(10,2) }

sales
|> join left orders using(item_id) with suffixes ['_s','_o']
|> derive revenue = qty * price
|> select date, item_id, qty, price, revenue, region

示例 5:采样与缓存(可复现实验)

source csv 'sales.csv' with header true
|> sample bernoulli 0.1 seed 42 repeatable
|> cache as sampled_sales
|> group by date aggregate sum(qty) as qty_sum

示例 6:时间解析与时区

set timezone 'Asia/Shanghai'

source csv 'events.csv'
  with header true
  schema { ts_str: string, user_id: string }
|> derive ts = to_timestamp(ts_str, 'yyyy-MM-dd HH:mm:ss')  -- 采用会话时区
|> group by date(ts) as d aggregate count(*) as uv

示例 7:可视化与导出

save as daily_sales  -- 假设前文已构建
|> plot line x=item y=total_qty title='Item Sales'
|> write png 'sales.png'

示例 8:SQL 审计

source csv 'sales.csv' with header true schema { date: date, item: string, qty: int, price: decimal(10,2) }
|> filter date >= '2025-01-01'
|> group by item aggregate sum(qty) as total_qty
|> explain sql

示例 9:多指标聚合与严格别名

source csv 'sales.csv' with header true schema { item: string, qty: int, price: decimal(10,2) }
|> group by item aggregate
     sum(qty) as total_qty,
     count(*) as orders,
     sum(qty * price) as gm_value
|> derive avg_price = gm_value / nullif(total_qty, 0)
|> select item, total_qty, orders, avg_price

——

语法特性对比(优化前后对比分析)

  • 管道写法

    • 前:换行隐式或 '->' 混用,链路不统一。
    • 后:统一使用 |>,左结合,语义清晰、可组合。
  • 空值语义

    • 前:null 与 'NA' 混用,无定义。
    • 后:唯一空值常量 null;source 通过 null_as 将特定文本映射为 null;提供 =? 与 coalesce。
  • 比较运算

    • 前:'==' 与 '=' 混杂。
    • 后:统一 '=';提供 '=?' 支持 null-safe 比较;'==' 明确报错并给出修复建议。
  • 时间与时区

    • 前:未声明,解析不确定。
    • 后:set timezone + date_parse/to_timestamp;source 可覆盖 tz;时区传导至窗口与时间函数。
  • 模式与类型

    • 前:隐式列/类型,聚合命名冲突未防护。
    • 后:schema 明确声明或推断记录;别名冲突静态检查,聚合别名必须唯一且不得与分组键冲突。
  • 聚合与窗口

    • 前:聚合语法与命名不一致,窗口缺失。
    • 后:group by ... aggregate 一致体;窗口 over by/order/rows|range 标准化。
  • 连接

    • 前:join 语法冗余(kind left),列冲突策略不统一。
    • 后:join [inner|left|...] on/using;with suffixes 控制冲突处理;限定名与默认后缀。
  • 编码与 CSV

    • 前:编码不明。
    • 后:encoding 显式;delim/header/quote/escape/null_as 参数化。
  • 审计与优化

    • 前:无等效 SQL 输出。
    • 后:explain sql/plan;validate 静态检查与提示。

——

使用注意事项和最佳实践建议

  • 一致性

    • 始终使用 |> 连接步骤;不要在同一管道内混合 select 与 derive 的别名依赖。
    • 使用 derive 做派生与覆盖;select 只做投影与重命名。
  • 空值处理

    • 数据源读取时使用 null_as 把 'NA'、空串等统一映射为 null。
    • 使用 coalesce 替换业务默认值;需要判等时优先使用 =? 代替复杂的 (a=b or (a is null and b is null))。
  • 时间与时区

    • 设定会话时区 set timezone;解析字符串时间时使用 to_date/to_timestamp,并指定格式。
    • 跨时区数据需在 source 中指定 tz,或在 derive 中显式转换。
  • 别名与冲突

    • 聚合别名避免与 group key 相同;join 后列冲突请使用 with suffixes 或限定名。
    • 在 select 中的别名不可被同一 select 后续表达式引用,使用 derive 拆分步骤。
  • 性能与复现

    • 重复使用的数据集使用 cache;实验使用 sample bernoulli ... seed ... repeatable 确保复现性。
    • 聚合前尽量 filter 以减少数据量;窗口前确保 order 列类型正确且基数合理。
  • 可审计性

    • 对关键产出在上线前执行 explain sql/plan;保留生成的 SQL 以便审计与回溯。
    • validate 检查通过作为流水线质量门槛。

——

扩展性设计和未来优化方向

  • 连接器扩展

    • 扩展 source/write 至 parquet, iceberg, delta, jdbc,多方言 SQL 直连;支持 credentials 管理与密钥引用。
  • 类型与函数

    • 增加 geography/geometry、json 类型;扩展时间窗口函数(session window)与时序函数(ASOF join)。
  • 配置与模块化

    • 引入 pipeline 级 options {...} 区块与可复用宏 macro,支持参数化与环境切换(dev/staging/prod)。
  • 编译与优化

    • 规则推送(predicate/aggregation pushdown)、列裁剪、跨管道 CSE(公共子表达式消除)。
    • 代价估计与自适应 join 策略选择;统计信息捕获与缓存。
  • 质量与监控

    • 数据质量 DSL 子集(expect/validate),产出指标(缺失率、分布漂移);内建数据血缘 lineage 与影响分析。
  • 安全与多租户

    • 行列级权限、受限 UDF、审计日志与可追踪 explain 结果签名。
  • 可视化生态

    • plot 统一语义导出到 vega-lite/ggplot 后端;主题与模板系统;可视化快照的元数据管理。

——

以上规范在保证语法一致性与逻辑严谨的前提下,统一了 DataFlow 的核心语义,强化了空值、时间、管道、聚合/窗口、连接与可审计性,适配分析师与数据工程师复杂场景的可读性与可维护性需求。

示例详情

解决的问题

面向个人理财DSL、教学编程与垂直行业语言的设计与迭代,提供一站式语法优化提示词:用一次输入,即可得到专业诊断、精简重构、完整示例与清晰规范,帮助团队快速打造“好学、好用、好维护”的语法体系,降低学习门槛与支持成本,提升用户留存、转化与上线效率。

适用用户

编程语言设计师/DSL作者

快速梳理现有语法并识别冗余,生成优化方案、规则与示例,缩短语言迭代周期,提升可读性与一致性。

教育工具产品经理与教研人员

为入门教学定制更易学的语法,自动产出分层示例与教学文档,减少试错与培训成本,提升课堂体验。

金融科技/理财业务开发者

优化理财领域语言的表达与校验,生成规范、注意事项与对比说明,降低错误率,加速业务规则落地。

特征总结

一键诊断现有语法,自动识别冗余与复杂结构,给出清晰、可执行的优化路径
按期望特性定制语法方案,保证简洁易读,全面覆盖核心业务需求表达
自动生成分层语法规则与完整示例,从入门到进阶,直接用于快速验证
提供优化前后对比说明,量化可读性与一致性提升,便于团队高效评审
输出标准化语法文档与注意事项,一次成稿,显著减少沟通与培训成本
为个人理财、教育工具、领域语言等场景,快速打样并稳定持续落地
遵循一致性与简洁原则,避免冗余设计,显著降低学习门槛与错误率
可持续扩展的语法框架,预留未来优化方向,灵活迭代更新,适应业务变化
面向用户体验的语法重构,让常见操作更直观,提升开发与教学效率

如何使用购买的提示词模板

1. 直接在外部 Chat 应用中使用

将模板生成的提示词复制粘贴到您常用的 Chat 应用(如 ChatGPT、Claude 等),即可直接对话使用,无需额外开发。适合个人快速体验和轻量使用场景。

2. 发布为 API 接口调用

把提示词模板转化为 API,您的程序可任意修改模板参数,通过接口直接调用,轻松实现自动化与批量处理。适合开发者集成与业务系统嵌入。

3. 在 MCP Client 中配置使用

在 MCP client 中配置对应的 server 地址,让您的 AI 应用自动调用提示词模板。适合高级用户和团队协作,让提示词在不同 AI 工具间无缝衔接。

AI 提示词价格
¥15.00元
先用后买,用好了再付款,超安全!

您购买后可以获得什么

获得完整提示词模板
- 共 482 tokens
- 4 个可调节参数
{ 现有语法 } { 期望特性 } { 目标应用场景 } { 语法复杂度要求 }
获得社区贡献内容的使用权
- 精选社区优质案例,助您快速上手提示词
限时免费

不要错过!

免费获取高级提示词-优惠即将到期

17
:
23
小时
:
59
分钟
:
59