读书人

LEX规则的写法

发布时间: 2012-03-29 12:53:12 作者: rapoo

求一个LEX规则的写法
一个SQL语句类似于
select * from table where contains(name,'xiaoming')>0;

关于识别'xiaoming'的规则,我的写法是

'[^'\n]*' {
yyless(yyleng);
if(yytext[yyleng]!='\''){

yylval.str = strdup((char*)yytext);return SCONST;
}else yymore();
}

这个写法是参照《lex与yacc》这本书上改写的
这个没问题,是可以识别,但只能识别单引号里面的字符本身没有'的情况

现在发现,在oracle下,若contains里面本身就带有单引号,例如想查询xiao'ming这个词的话,里面的单引号是可以通过双写单引号来达到转义的目的
即语句变为select * from table where contains(name,'xiao''ming')>0

这种情况的LEX识别规则应该怎么写?如果后面执行体不变的话,只是将前面的规则改为'[^\n]*'是不行的,我试过了

请各位大虾帮忙呀

[解决办法]

[解决办法]
mark!

读书人网 >其他开发语言

热点推荐