1. cpp文件生成
1.1 工具准备
从www.cygwin.org:http://cygwin.com/install.html下载cygwin.
执行setup.exe并选择flex/bison两个工具包
1.2 启动cygwin
启动桌面上的cygwin terminator,进入到.l与.y文件所在的路径.
1.2 生成xqlexer.cpp
在cygwin中执行 flex -L -oXQLexer.cpp XQLexer.l
1.3 生成xqPaser.cpp
在cygwin中执行 bison -l -d -o XQParser.cpp XQParser.y
2. 添加用户命令
以命令createdb为例,格式为createdb dbname;
2.1 修改XQLexer.l
打开XQLexer.l文件,
在最后一个 行之后
添加同样一行,修改为createdb { BEGIN COMMAND; return token::CREATEDB;}
若参数中还有关键字,在行之后添加类似的行.
保存文件,生成xqlexer.cpp,具体参见1.2
2.2 修改XQPaser.y
打开XQPaser.y,
在%token VERSION "version"类似行之后添加命令的标签, %token CREATEDB "createdb"
在990行 SHOWVERSION sideoption下添加命令处理.命令参数为字符串的,用DName表示.参照我们的命令格式和现有的方式很容易理解
| CREATEDB DName
{
XdbParserArg* arg = new XdbParserArg(); //创建返回对象
$$ = arg; //返回值
arg->cmd = createdb; //命令类型, 在utils/commandtype.h中定义
arg->params.push_back($2); //加入参数值,参数值以1开始,因此为第2个
delete $2; //DName为new出来的字符串,需要删除.
}
若命令中有些常量之类,请参考其他命令修改或添加.
生成XQparser.cpp
3. 修改用户命令
按照修改要求对xqlexer.l, xqparser.y