Mysql 语法分析

千条语句大概在11毫秒左右,另外文法星号可以自动提取出来。比如创建数据库语句,定义好文法,可以自动提取出数据库名字。

微信截图_20200305163818.png


源码 支持Mysql注释符解析

function getMysql(j){function q(P){return"[object String]"==Object.prototype.toString.call(P)?P.toLowerCase():P}function w(){""!=B&&z.push(B),B=""}var y=j.replace(/--\s[\s\S]*|--\s[\s\S]*[\r\n|\n]|\/\*(.|[\r\n|\n])*\*\/|#[\s\S]*[\r\n|\n]|#[\s\S]*/i,""),z=[],A=[],B="",C=["'","\"",";"],D=[" ","\r\n","\n","\r"],E=[["create","database","*",[["\u6570\u636E\u5E93\u540D\u79F0"],1]],["use","*",[["\u6570\u636E\u5E93\u540D\u79F0"],2]],["drop","database","*",[["\u6570\u636E\u5E93\u540D\u79F0"],3]]];for(i=0;i<y.length;i++){var F=y.charAt(i);-1===C.indexOf(F)?-1===D.indexOf(F)?B+=F:w():(w(),z.push(F))}for(w(),E.sort(function(P,Q){return Q.length-P.length}),i=0;i<z.length;i++){var G=i;for(k=0;k<E.length;k++)if(z.length-i>=E[k].length-1){var H=E[k].length-1,I=0,J=[];for(n=0;n<E[k].length-1;n++)0==function(P,Q){return"*"==P&&"*"!=Q?0:"*"==P&&"*"==Q?-1:q(P)==q(Q)?0:-1}(E[k][n],z[i])&&(i++,I++),"*"==E[k][n]&&J.push(n);if(I==H){var K="",L=0,M=[];for(m=G;m<i;m++)-1!==J.indexOf(L)&&M.push(z[m]),K=K+z[m]+" ",L++;K=K.substring(0,K.length-1);var N=[E[k][E[k].length-1][1],K,M];A.push(N),i--}else i-=I}}return 0==A.length?j:A}
let res =getMysql("Create database ku1 #DWADWADAWJKHJK\r\n#DWADWADAWJKHJK\n-- DWADWADAWJKHJK Create database ku2");
console.log(res);



Mysql 语法分析


关注小程序 [上下博客] 扫码手机完整阅读

本站如无特别说明即为原创,转而告知:(https://iwonmo.com/archives/1718.html)

标签: mysql语法分析, mysql编译器, mysql分析语句

添加新评论