SuperAPI AI 工具集

compiler-frontend

编程与开发

查看项目

更新于 10-15 15:12

技能介绍

用途

Compiler Frontend 用于引导智能体逐步构建编译器前端,覆盖从源码到 LLVM IR 的主要环节:词法分析、语法分析、AST 设计、符号表、类型检查、错误恢复与 IR 生成。

使用时机

  • 实现新的编程语言或 DSL
  • 为解释器或配置语言添加表达式解析
  • 在 C 或 Rust 中设计 AST 节点层次结构
  • 为变量和函数构建带作用域的符号表
  • 实现基础类型推断或类型检查
  • 从类型化 AST 生成 LLVM IR

整体流程

Source → Lexer(tokens)→ Parser(AST)→ Type checker → IR generator → LLVM IR

词法分析:手写 DFA

技能提供手写 DFA 词法分析器的 C 代码示例,定义了 TokenKind 枚举、Token 与 Lexer 结构体,以及跳过空白字符、读取整数/标识符/符号并返回 token 的 lexer_next 函数。另提供 flex 替代方案及构建命令:

flex lexer.l && gcc -o lexer lexer.tab.c -lfl

表达式解析:Pratt parser

示例展示 AstKind 枚举与 AstNode 联合体结构,并给出绑定力常量 BP_NONE、BP_SUM、BP_PRODUCT,通过 parse_expression 按最小绑定力处理运算符优先级,避免庞大的语法表。

语句解析:递归下降

parse_statement 示例演示如何识别赋值语句与返回语句,调用表达式解析并期望分号,否则回退到表达式语句。

AST 与符号表

技能定义 Symbol(含名称、类型、LLVM 值与链式 next)与 Scope(含符号桶链与父作用域),并提供 scope_lookup(逐层向上查找)与 scope_define(在当前作用域定义新符号)的实现。

类型检查基础

示例定义 TypeKind(TY_INT、TY_BOOL、TY_FUNC、TY_VOID),check_expr 对整数字面量返回整型、对变量查找符号表并在未定义时报错、对二元运算校验两侧类型一致否则报错。技能另提及完整推断可使用 Hindley-Milner:分配类型变量并在约束上做统一,适用于 ML 类语言。

错误恢复

技能列出多种策略及适用场景:

  • Panic mode:跳过 token 直到同步 token(;、})
  • Synchronization sets:为每个非终结符定义恢复 token
  • Error productions:为常见错误编写语法规则
  • Single-token insertion/deletion:适合 IDE 的恢复方式

并给出 synchronize 示例,向前推进直到遇到分号后或 return/标识符等边界。

LLVM IR 生成

示例引入 <llvm-c/Core.h> 与 <llvm-c/ExecutionEngine.h>,使用 LLVMModuleRef 与 LLVMBuilderRef,在 codegen_expr 中生成整型常量、二元加法与变量加载。转储与校验方式为:

LLVMDumpModule(module);
char *err = NULL;
LLVMVerifyModule(module, LLVMReturnStatusAction, &err);

Rust 可使用 inkwell 或 llvm-sys crate 获得更安全的绑定。

常见问题

技能提供症状—原因—修复表,包括:解析器死循环(错误分支未推进 token)、运算符优先级错误(绑定力不正确)、作用域中符号重复(缺遮蔽检查)、LLVM 校验失败(IR 类型不匹配、符号与指针层级)、flex token 冲突(模式重叠,按最长匹配与规则顺序处理)、错误级联(缺少同步,需实现恐慌模式恢复)。

相关技能

  • skills/compiler-internals/llvm-passes — 优化生成的 IR
  • skills/compiler-internals/jit-compilation — 执行生成的 IR
  • skills/compiler-internals/mlir — 面向 DSL 的更高层 IR
  • skills/compilers/llvm — 作为使用者调用 LLVM(opt、llc)
  • skills/low-level-programming/interpreters — 字节码虚拟机替代方案
  • skills/languages/carbon-lang — 现代语言前端示例

限制

本技能资料未提供收费、价格、部署平台或性能效果等信息。