MySQL SQL 解析器详解
1. 解析器概述
在处理 SQL 语句时,解析器起着至关重要的作用。它能够将输入的 SQL 文本转换为计算机可以理解和处理的形式。这里介绍的 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; }解析器开头包含了常见的头文件和两个函数原型,yyerror()用于报错,emit()用于生成逆波兰表示法(RPN)代码。%union定义了四个成员,分别用于存储整数值、浮点数值、字符串指针和子标记。
1.1 词法规则
词法规则用于处理输入文本中的各种字符模式,例如跳过空白字符、处理注释以及处理无效字符。以下是部分词法规则代码:
<COMMENT><<EOF>> { yyerror("unclosed comment"); } /* everything else */ [ \t\n] /* whit