基於 C 的 SQL Parser 實現

2021-07-04 15:44:53 字數 2011 閱讀 1784

乙個函式,可以提取sql語句中查詢字段部分。雖然函式中使用了block,但是block可以很方便的轉換成純 c 的函式,而且未來 block 也很有可能成為 c 標準。

#import typedef struct field field;

const field emptyfield = ;

static inline bool samefield(field field1, field field2)

return no;

};void sqlparser(const char *sqlcstring)

switch (sqlcstring[i])

break;

case '`':

split_string_duplicate('`', j);

j = strlen(tmpcstring);

if (sqlcstring[i] == ')')

break;

case ')':

meetend = yes;

break;

default:

break;}}

break;

case '\'':

// 單引號,要遮蔽兩個連續的單引號

while (i < sqlcstringlength) else

}else}}

break;

case '`':

// 反單引號 取所有內容

while (i < sqlcstringlength) else}}

break;

default:

// 其它字元,遇到空格或逗號結束, 遇到左小括號就直到右小括號結束

while (i < sqlcstringlength)

if (sqlcstring[i] == ' ' || sqlcstring[i] == ',')

}break;}};

// 複製上面這個block,使其可在其內部呼叫

split_string_duplicate = split_string;

field fields[100] = ;

__block field *fields_pointer = fields; // 存放所有欄位的陣列

__block char *tmp_field_name = null; // 存放乙個欄位名

__block bool meetas = no; // 遇到 as 關鍵字

void (^field_parser)(char *) = ^(char *field_word) else

free(tmp_field_name);

tmp_field_name = null;

fields_pointer ++;

}}else if(strcmp(field_word, "as") == 0)

meetas = yes;

}elseelse}};

bool meetfield = no;

while (i < sqlcstringlength)

}goto loop_start;

break;

default:

split_string(sqlcstring[i], 0);

break;

}if (meetfield == yes)

field_parser(tmpcstring);

}}else if (strcmp(tmpcstring, "select") == 0)

tmpcstring[0] = '\0';

}// 釋放記憶體

if (tmp_field_name != null)

free(tmpcstring);

tmpcstring = null;

int fi = 0;

while (!samefield(fields[fi], emptyfield))

}

用C 實現基於用C 實現基於TCP協議的網路通訊

tcp 協議是乙個基本的網路 協議,基本上所有的網路服務都是基於 tcp協議的,如http,ftp等等,所以要了解網路程式設計就必須了解基於 tcp協議的程式設計。然而 tcp協議是乙個龐雜的體系,要徹底的弄清楚它的實現不是一天兩天的功夫,所幸的是在.net framework環境下,我們不必要去追...

LZW基於C語言的實現

lzw演算法具有很多版本,其大致思想一致。主要思想是盡最大可能不產生冗餘,以自適應的方式建立乙個內部字典。其演算法流程如下 lzw演算法流程 步驟1 開始時的詞典包含所有可能的根 root 而當前字首p是空的 步驟2 當前字元 c 字元流中的下乙個字元 步驟3 判斷綴 符串p c是否在詞典中 1 如...

基於c 的ostu演算法的實現

影象二值化演算法是影象處理的基礎。一般來說,二值化演算法可以分為兩個類別 全域性二值化和區域性二值化。全域性二值化是指通過某種演算法找到乙個全域性的閾值t,對影象中座標為 x,y 的畫素值做如下處理 ostu就是這樣一種全域性二值化演算法,又叫最大類間方差。因為該演算法會遍歷影象中任意乙個畫素值i,...