标准sql语法分析源程序个人觉得SQL SERVER 2000的查询分析器就很好用啊,
不知楼主所求何物?

解决方案 »

  1.   

    T-SQL不是标准SQL,楼主可以上网找下SQL-92标准语法
      

  2.   

    我也刚刚好在看这个东西:SharpHSQL,唯一的一个用纯C#开发的嵌入式轻量级开源数据库。下载地址:
    http://www.gotdotnet.com/workspaces/workspace.aspx?id=ea06f702-480a-4b60-8402-70b27c6472dd源程序里有SQL词法、语法分析的完整代码,就是基本没什么注释。
      

  3.   

    贴一段,注释是我自己加的.
    <Tokenizer.cs>
    private void GetToken() 
    {
    if (bWait) 
    {
    bWait = false; return;
    }
    //如果当前字符是空格则搜索下一个,直到找到非空格的字符
    while (iIndex < iLength && Char.IsWhiteSpace(cCommand[iIndex])) 
    {
    iIndex++;
    } sToken = ""; if (iIndex >= iLength) 
    {
    iType = 0; return;
    } bool      point = false, digit = false, exp = false, afterexp = false;
    bool      end = false;
    char   c = cCommand[iIndex];
    char   cfirst = '0';
    StringBuilder name = new StringBuilder();
    //是字母则表示该单词是Name
                if (Char.IsLetter(c)) {
                iType = TokenType.NAME;
    }
    //如果当前字符是特殊字符
    //则返回该特殊字符,退出函数
            else if ("(),*=;+%".IndexOf(c) >= 0) 
    {
    iType = TokenType.SPECIAL;
    iIndex++;
    sToken = "" + c; return;

    //如果当前字符是数字
    //则表示该单词是数字
    else if (Char.IsDigit(c)) 
    {
    iType = TokenType.NUMBER;
    digit = true;
    }
    //如果当前字符是@
    //则表示该单词是变量名
    else if ("@".IndexOf(c) >= 0) 
    {
    cfirst = c;
    iType = TokenType.VARIABLE;

    //如果当前字符是比较符或者运算符
    //则表示该单词是特殊字符
    else if ("!<>|/-".IndexOf(c) >= 0) 
    {
    cfirst = c;
    iType = TokenType.SPECIAL;

    //如果当前字符是双引号
    //则表示是后面的单词是引用
    else if (c == '\"') 
    {
    iType = TokenType.QUOTED_IDENTIFIER;

    //如果当前字符是单引号
    //则表示后面的单词是字符串常量
    else if (c == '\'') 
    {
    iType = TokenType.STRING; name.Append('\'');

    //如果当前字符是小数点,则表示该单词是Float数
    else if (c == '.') 
    {
    iType = TokenType.FLOAT;
    point = true;

    //其他字符均为非法字符
    else 
    {
    throw Trace.Error(Trace.UnexpectedToken, "" + c);
    } int start = iIndex++;