简介
SQL解释器功能:基本增删改查
基本功能基本都有,词法分析存在的问题应该不大。可以参考
终结符如下
%left OR
%left AND
%right NOT
%nonassoc '=' '>' '<'
%left '+','-'
%left '*','/'
%term CREATE TABLE CHAR INT DATABASE USE SHOW DATABASES
%term EXIT QUIT DROP TABLE TABLES INSERT INTO VALUES
%term SELECT FROM WHERE FALSE TRUE AND NOT OR DELETE UPDATE SET
%term<yych> ID NUMBER STRING
数字以char*数组存储,用的时候转换一下
%{
#include "mysql4yacc.h"
#include<stdlib.h>
#include<String.h>
char* stop;
%}
digit [0-9]
digits {digit}+
%%
[ ]+ {}
[\n]+ {}
"CREATE" {return CREATE;}
"DATABASE" {return DATABASE;}
"USE" {return USE;}
"SHOW" {return SHOW;}
"DATABASES" {return DATABASES;}
"DROP" {return DROP;}
"TABLE" {return TABLE;}
"TABLES" {return TABLES;}
"INT" {return INT;}
"CHAR" {return CHAR;}
"INSERT" {return INSERT;}
"INTO" {return INTO;}
"VALUES" {return VALUES;}
"SELECT" {return SELECT;}
"FROM" {return FROM;}
"WHERE" {return WHERE;}
"AND" {return AND;}
"OR" {return OR;}
"NOT" {return NOT;}
"TRUE" {return TRUE;}
"FALSE" {return FALSE;}
"DELETE" {return DELETE;}
"UPDATE" {return UPDATE;}
"SET" {return SET;}
"EXIT" {return EXIT;}
"QUIT" {return QUIT;}
"(" {return '(';}
")" {return ')';}
"," {return ',';}
";" {return ';';}
"+" {return '+';}
"-" {return '-';}
"*" {return '*';}
"/" {return '/';}
">" {return '>';}
"<" {return '<';}
"=" {return '=';}
"!" {return '!';}
"\'" {return '\'';}
{digits} {
yylval.yych=(char*)malloc(strlen(yytext)+1);
strcpy(yylval.yych,yytext);
return NUMBER;
}
[a-zA-Z][a-zA-Z0-9_]*
{
yylval.yych=(char*)malloc(strlen(yytext)+1);
strcpy(yylval.yych,yytext);
return ID;
}
[a-zA-Z0-9_]*
{
yylval.yych=(char*)malloc(strlen(yytext)+1);
strcpy(yylval.yych,yytext);
return STRING;
}
%%
yacc中字符串应该这样写
string : '\'' STRING '\''
| '\'' ID '\''
| '\'' NUMBER '\''
;
最好设置一下不区分大小写
https://blog.csdn.net/D1124615130/article/details/106528532
可能用到的C语言输入输出函数的简单介绍
https://blog.csdn.net/D1124615130/article/details/106785256
语法分析
https://blog.csdn.net/D1124615130/article/details/108333469
完整版
https://download.csdn.net/download/D1124615130/20062947?spm=1001.2014.3001.5503
觉得有用的话不妨点个赞,评个论,有什么问题可以在评论区提出。