Aster Lang 类型脚本编译器
TypeScript 执行 Aster CNL(控制自然语言)编译器管道.
概览
Aster是一种实用,类型安全的语言,有人可读可控的自然语言语法. 此软件包提供了纯 TypeScript 编译器基础设施 :
- 发光器: 规范 CNL 源代码
- 莱克瑟: 有多语言词汇支持的tokenizes source
- 解析器: 从符号流生成 AST
- 核心IR点: 中级代表
- 类型检查器:静态类型分析
- LSP 服务器: 语言服务器协议执行
安装
pnpm install @aster-cloud/aster-lang-ts
快速启动
import { parseSource, resolveAndLowerChecked } from '@aster-cloud/aster-lang-ts';
// Compile pipeline: canonicalize → lex → parse → name resolution (R1) → lower → name resolution (R2)
const source = `
Module greeting.
Rule greet given name, produce:
Return Text.concat("Hello, ", name).
`;
const { ast } = parseSource(source);
// Throws NameResolutionError (E8xx diagnostics) instead of returning Core with unresolved names
const { core, diagnostics } = resolveAndLowerChecked(ast);
原始降压( E)lowerModule和不受约束 resolveAndLower 内部不导出 :
每条通往 Core IR 的公用路径都会运行名称解析度并拒绝在解析度错误上发出IR.
使用 compile 编号 : compileAndTypecheck 从 @aster-cloud/aster-lang-ts/browser, (中文(简体) ),
resolveAndLowerChecked,或 resolvePolicyTypes。 。 。 .
多语言支持
Aster支持用多种自然语言写作政策:
import { canonicalize, lex, parse } from '@aster-cloud/aster-lang-ts';
import { ZH_CN } from '@aster-cloud/aster-lang-ts/lexicons/zh-CN';
const zhSource = `
模块 问候。
规则 问候 给定 姓名,产出:
返回「你好,」 加 姓名。
`;
const tokens = lex(canonicalize(zhSource, ZH_CN), ZH_CN);
const ast = parse(tokens);
支持的语言 :
- 英语( en- US) - 默认
- 简化中文 (zh-CN)
- 德语( de-DE)
当前 CNL 样式
- 类型推论是默认的;实例会避免明显的类型说明.
- 接线员呼叫链被移除. 使用标准调用或内插操作符.
- 语句以句号结尾,而块头以结肠结尾.
文档
docs/overview.mddocs/cnl-syntax.mddocs/type-inference.mddocs/operator-call.mddocs/examples.mddocs/contributing.md- 本地化文件 :
- 英语( 默认): 上面的同名列表.
- 简体中文:
docs/zh/overview.md, (中文(简体) ),docs/zh/cnl-syntax.md, (中文(简体) ),docs/zh/type-inference.md, (中文(简体) ),docs/zh/operator-call.md, (中文(简体) ),docs/zh/examples.md, (中文(简体) ),docs/zh/contributing.md - 德意志:
docs/de/overview.md, (中文(简体) ),docs/de/cnl-syntax.md, (中文(简体) ),docs/de/type-inference.md, (中文(简体) ),docs/de/operator-call.md, (中文(简体) ),docs/de/examples.md, (中文(简体) ),docs/de/contributing.md
发展
# Install dependencies
pnpm install
# Build
pnpm build
# Run tests
pnpm test:unit
# Start LSP server
pnpm lsp
# REPL
pnpm repl
项目结构
src/
├── canonicalizer.ts # Source normalization
├── lexer.ts # Tokenization
├── parser.ts # AST generation
├── ast.ts # AST definitions
├── lower_to_core.ts # Core IR lowering
├── core_ir.ts # Core IR definitions
├── typecheck/ # Type checker
├── lsp/ # Language Server Protocol
└── config/
└── lexicons/ # Multi-language lexicons
├── en-US.ts
├── zh-CN.ts
└── de-DE.ts
API 参考
核心出口
| 导出 | 说明 |
|---|---|
canonicalize(source, lexicon?) | 规范 CNL 源 |
lex(source, lexicon?) | 切换来源 |
parse(tokens) | 分析到 AST |
parseSource(source, lexicon?, scopes?) | 分类、标记和剖析 |
resolveAndLowerChecked(ast, scopes?) | 名称分辨率+降低到核心IR; 抛出 NameResolutionError 关于 E8xx 的 |
resolvePolicyTypes(source, options) | 以原始拼写方式解析数据/ Enum 声明 |
typecheck(module) | 类型检查模块 |
语法导出
import { EN_US } from '@aster-cloud/aster-lang-ts/lexicons/en-US';
import { ZH_CN } from '@aster-cloud/aster-lang-ts/lexicons/zh-CN';
import { DE_DE } from '@aster-cloud/aster-lang-ts/lexicons/de-DE';
许可证
麻省理工学院