bd02a4989e
- lexer: 新增 TOK_MUT 关键字 - ast: AST_ASSIGN_STMT 节点 + let_stmt.is_mut 标志 - parser: ‘let mut’ 前缀识别 + ‘ident = expr;’ 赋值语句 - sema: Symbol.is_mut 可变性检查(不可变变量赋值报错) - codegen: AST_ASSIGN_STMT → store 指令 - 新增集成测试 06_mut_while.l(while 循环 + 计数器) 基于 Codex 分析报告 P0 建议。
46 lines
1.1 KiB
C
46 lines
1.1 KiB
C
#ifndef TOKEN_H
|
|
#define TOKEN_H
|
|
|
|
#include "l_lang.h"
|
|
|
|
// === Token 类型枚举 ===
|
|
typedef enum {
|
|
// 关键字
|
|
TOK_FN, TOK_LET, TOK_MUT, TOK_IF, TOK_ELSE, TOK_WHILE, TOK_RETURN,
|
|
// 类型关键字
|
|
TOK_I64, TOK_F64, TOK_BOOL, TOK_VOID,
|
|
// 字面量
|
|
TOK_INT_LIT, TOK_FLOAT_LIT, TOK_TRUE, TOK_FALSE,
|
|
// 标识符
|
|
TOK_IDENT,
|
|
// 运算符
|
|
TOK_PLUS, TOK_MINUS, TOK_STAR, TOK_SLASH, TOK_PERCENT,
|
|
TOK_EQ_EQ, TOK_BANG_EQ, TOK_LT, TOK_GT, TOK_LT_EQ, TOK_GT_EQ,
|
|
TOK_AND_AND, TOK_PIPE_PIPE, TOK_BANG,
|
|
TOK_ARROW,
|
|
// 分隔符
|
|
TOK_LPAREN, TOK_RPAREN, TOK_LBRACE, TOK_RBRACE,
|
|
TOK_COMMA, TOK_COLON, TOK_SEMICOLON, TOK_ASSIGN,
|
|
// 特殊
|
|
TOK_EOF, TOK_ERROR,
|
|
} TokenKind;
|
|
|
|
// === Token 结构体 ===
|
|
struct Token {
|
|
TokenKind kind;
|
|
const char* start; // 指向源码中 token 起始位置
|
|
int length; // token 文本长度
|
|
int line;
|
|
int col;
|
|
};
|
|
|
|
// === 工具函数 ===
|
|
const char* tok_name(TokenKind kind);
|
|
bool tok_is_type(TokenKind kind);
|
|
|
|
// 从 Token 提取值
|
|
int64_t tok_int_value(const Token* tok);
|
|
double tok_float_value(const Token* tok);
|
|
|
|
#endif
|