1 Star 1 Fork 0

刘司元 / C语言分词器

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
cscanner.h 4.08 KB
一键复制 编辑 原始数据 按行查看 历史
刘司元 提交于 2023-07-26 09:51 . add cscanner.h.
#ifndef CSCANNER_CSCANNER_H
#define CSCANNER_CSCANNER_H
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef enum {
// single-character tokens
TOKEN_LEFT_PAREN, // '(', 0
TOKEN_RIGHT_PAREN, // ')', 1
TOKEN_LEFT_BRACKET, // '[', 2
TOKEN_RIGHT_BRACKET,// ']', 3
TOKEN_LEFT_BRACE, // '{', 4
TOKEN_RIGHT_BRACE, // '}', 5
TOKEN_COMMA, // ',', 6
TOKEN_DOT, // '.', 7
TOKEN_SEMICOLON, // ';', 8
TOKEN_TILDE, // '~', 9
// one or two character tokens
TOKEN_PLUS, // '+', 10
TOKEN_PLUS_PLUS, // '++', 11
TOKEN_PLUS_EQUAL, // '+=', 12
TOKEN_MINUS, // '-', 13
TOKEN_MINUS_MINUS, // '--', 14
TOKEN_MINUS_EQUAL, // '-=', 15
TOKEN_MINUS_GREATER, // '->', 16
TOKEN_STAR, // '*', 17
TOKEN_STAR_EQUAL, // '*=', 18
TOKEN_SLASH, // '/', 19
TOKEN_SLASH_EQUAL, // '/=', 20
TOKEN_PERCENT, // '%', 21
TOKEN_PERCENT_EQUAL, // '%=', 22
TOKEN_AMPER, // '&', 23
TOKEN_AMPER_EQUAL, // '&=', 24
TOKEN_AMPER_AMPER, // '&&', 25
TOKEN_PIPE, // '|', 26
TOKEN_PIPE_EQUAL, // '|=', 27
TOKEN_PIPE_PIPE, // '||', 28
TOKEN_HAT, // '^', 29
TOKEN_HAT_EQUAL, // '^=', 30
TOKEN_EQUAL, // '=', 31
TOKEN_EQUAL_EQUAL, // '==', 32
TOKEN_BANG, // '!', 33
TOKEN_BANG_EQUAL, // '!=', 34
TOKEN_LESS, // '<', 35
TOKEN_LESS_EQUAL, // '<=', 36
TOKEN_LESS_LESS, // '<<', 37
TOKEN_GREATER, // '>', 38
TOKEN_GREATER_EQUAL, // '>=', 39
TOKEN_GREATER_GREATER,// '>>', 40
// literal
TOKEN_IDENTIFIER,// 41
TOKEN_CHARACTER, // 42
TOKEN_STRING, // 43
TOKEN_NUMBER, // 44
// keywords
TOKEN_SIGNED, // 45
TOKEN_UNSIGNED,// 46
TOKEN_CHAR, // 47
TOKEN_SHORT, // 48
TOKEN_INT, // 49
TOKEN_LONG, // 50
TOKEN_FLOAT, // 51
TOKEN_DOUBLE, // 52
TOKEN_STRUCT, // 53
TOKEN_UNION, // 54
TOKEN_ENUM, // 55
TOKEN_VOID, // 56
TOKEN_IF, // 57
TOKEN_ELSE, // 58
TOKEN_SWITCH, // 59
TOKEN_CASE, // 60
TOKEN_DEFAULT, // 61
TOKEN_WHILE, // 62
TOKEN_DO, // 63
TOKEN_FOR, // 64
TOKEN_BREAK, // 65
TOKEN_CONTINUE,// 66
TOKEN_RETURN, // 67
TOKEN_GOTO, // 68
TOKEN_CONST, // 69
TOKEN_SIZEOF, // 70
TOKEN_TYPEDEF, // 71
// else
TOKEN_ERROR,// 72
TOKEN_EOF // 73
} TokenType;
typedef struct token {
TokenType type;
const char *start;
int length;
int line;
} Token;
// 初始化词法分析器
void initScanner(const char *source);
// 返回下一个 Token
Token scanToken();
// 检查是不是 关键字
static TokenType checkKeyword(int start, int length, const char *rest, TokenType type);
// 区分标识符和关键字
static TokenType identifierType();
// 返回 标识符或关键字 的 Token
static Token identifier();
// 返回 整数或小数 的 Token
static Token number();
// 返回 双引号中字符串 的 Token
static Token string();
// 返回 单引号中字符 的 Token
static Token character();
// 是否为字母或下划线
static bool isAlpha(char c);
// 是否为数字
static bool isDigit(char c);
// 是否为字符串结束符
static bool isAtEnd();
// 返回当前字符, 并且 current 向前移动一位
static char advance();
// 返回当前字符
static char peek();
// 返回 current 下一位的字符, current 不动
static char peekNext();
// 判断当前字符与参数字符是否相等, 相等时 current 后移一位
static bool match(char expected);
// 创建对应类型的 taken 对象
static Token makeToken(TokenType type);
// 遇到 @ $ ' " / 符号时创建一个 TOKEN_ERROR
static Token errorToken(const char *message);
// 跳过空白字符和注释
static void skipWhitespace();
#endif
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C
1
https://gitee.com/liu-siyuan888/cscanner.git
git@gitee.com:liu-siyuan888/cscanner.git
liu-siyuan888
cscanner
C语言分词器
master

搜索帮助

344bd9b3 5694891 D2dac590 5694891