不多说,直逼主题
1. Token的结构
了解过词法分析器应该都知道,实现一个程序经过词法分析器之后,会生成一个Token,供语法分析器使用。我们在这里就先实现这个token的结构,很简单。
struct Token{
string cifadanyuan;
string cisu;
Token(){
}
Token(string cifadanyuan,string cisu){
this->cifadanyuan = cifadanyuan;
this->cisu = cisu;
}
string toString(){
return this->cifadanyuan+" "+this->cisu;
}
//toString方法,方便我们后面把它展示到控制台上
};
2. 程序的基本框架
我们在这里先介绍一下程序的基本框架。
class Lexical{
const string operators = "+-*/%=&|<>!";
const string singleword = "(),.;";
//这里使用一个哈希表来存储sql里面的保留字,这里只是一部分,有耐心可以的话,可以全加进去。
unordered_map<string,int> keyword{
{
"select",1},{
"insert",2},{
"delete",3},{
"update",4},
{
"from",5},{
"create",6},{
"database",7},{
"as",8},
{
"drop",9},{
"alter",10},{
"into",11},{
"where",12},
{
"join",13},{
"set",14},{
"use",15},{
"table",16},
{
"index",17},{
"primary",18},{
"in",19},{
"between",20},
{
"like",21},{
"and",22</