MySQL SQL解析器详解
1. 词法分析与预处理
在处理输入的SQL语句时,首先要进行词法分析。以下是部分词法分析的规则:
<COMMENT><<EOF>> { yyerror("unclosed comment"); }
/* everything else */
[ \t\n] /* whitespace */
. { yyerror("mystery character '%c'", *yytext); }
这些规则的作用如下:
- 跳过空白字符,当空白字符为换行符时会进行行计数。
- 跳过注释内容。
- 如果输入中出现无效字符,会发出错误提示。C注释模式使用了独占起始状态 COMMENT 来吸收注释内容, <<EOF>> 模式用于捕获运行到输入文件末尾的未闭合C风格注释。
2. 解析器的初始化
2.1 包含文件与函数原型
解析器以常见的包含语句和两个函数原型开始:
%{
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
void yyerror(char *s, ...);
void emit(char *s, ...)
超级会员免费看
订阅专栏 解锁全文
10万+

被折叠的 条评论
为什么被折叠?



