MySQL SQL 解析器详解
1. 词法分析与注释处理
在处理输入时,需要跳过空白字符、注释,并对无效字符进行报错。以下是相关的词法规则:
<COMMENT><<EOF>> { yyerror("unclosed comment"); }
/* everything else */
[ \t\n] /* whitespace */
. { yyerror("mystery character '%c'", *yytext); }
这里使用了排他起始状态 COMMENT 来处理 C 风格的注释, <<EOF>> 模式用于捕获未闭合的 C 风格注释。
2. 解析器概述
SQL 解析器规模较大,但可以分部分理解。下面是解析器的初始部分:
%{
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
void yyerror(char *s, ...);
void emit(char *s, ...);
%}
%union {
int intval;
double floatval;
char *strval;
int subtok;
}
超级会员免费看
订阅专栏 解锁全文
10万+

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



