日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用C语言实现SGF格式围棋棋谱解析器

發布時間:2023/12/18 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用C语言实现SGF格式围棋棋谱解析器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  這是本人(liigo)獨立實現的SGF格式圍棋棋譜文件解析器,本文介紹其實現細節。網絡上肯定可以找到完善的開源的SGF解析器,這是毋庸置疑的,我不直接使用它們,也不參考它們的實現代碼,而是自己獨立編碼實現,是有原因的,因為我想自己重復發明輪子,并且認為這樣更有助于提高我的編碼能力。(關于我的“一定要學會重復發明輪子”的不成熟的論調,今后我將會專門撰文表述。)

  我(liigo)開發的這個SGF解析器,采用基于事件的簡單API,類似于XML解析器中的SAX(Simple API for XML)。這種解析器的核心是:由用戶事先提供一系列回調函數,解析器在解析的過程中,依次調用相關的回調函數并傳入相應參數,用戶程序在回調函數中做出相應的處理。此類解析器屬于輕量級的解析器,解析速度快,占用內存少,結構清晰易于實現,只是相對來說不如基于DOM的解析器方便使用。

  SGF格式,Smart Game Format,被設計用來記錄多種游戲類棋譜的通用格式,在圍棋領域被發揚光大,是用于描述圍棋棋譜的最重要也最通用的形式。它是純文本的、基于樹(TREE)的結構,便于識別、存儲和傳輸。其格式簡潔實用,也非常易于編程解析。SGF格式官方規范網址為:http://www.red-bean.com/sgf/。(說到圍棋棋譜,不得不贊嘆一下,它只需用一幅圖就可以完整還原一盤棋從始至終的風云變幻;作為對比,象棋一幅圖只能描述對弈中某一時刻的場景。)

  SGF的主要結構由樹(GameTree)、節點序列(Sequence)、節點(Node)、屬性(Property)等組成。其中“屬性”為最重要的基本單位,它由屬性標識(PropIdent)和屬性值(PropValue)組成。由分號“;”分隔的多個屬性,稱為節點。多個節點順序排列稱為節點序列。由括號“(”“)”括起來的節點序列,稱為樹,樹中可包含子樹。SGF的EBNF定義如下(參見http://www.red-bean.com/sgf/sgf4.html#ebnf-def):

Collection = GameTree { GameTree } GameTree = "(" Sequence { GameTree } ")" Sequence = Node { Node } Node = ";" { Property } Property = PropIdent PropValue { PropValue } PropIdent = UcLetter { UcLetter } PropValue = "[" CValueType "]" CValueType = (ValueType | Compose) ValueType = (None | Number | Real | Double | Color | SimpleText | Text | Point | Move | Stone)

  以下是一個簡單的有一定代表性的SGF文本,先讓大家有一個感性認識:

(;FF[4]GM[1]SZ[19]FG[257:Figure 1]PM[1] PB[Takemiya Masaki]BR[9 dan]PW[Cho Chikun] WR[9 dan]RE[W+Resign]KM[5.5]TM[28800]DT[1996-10-18,19] EV[21st Meijin]RO[2 (final)]SO[Go World #78]US[Arno Hollosi] ;B[pd];W[dp];B[pp];W[dd];B[pj];W[nc];B[oe];W[qc];B[pc];W[qd] (;B[qf];W[rf];B[rg];W[re];B[qg];W[pb];B[ob];W[qb] (;B[mp];W[fq];B[ci];W[cg];B[dl];W[cn];B[qo];W[ec];B[jp];W[jd] ;B[ei];W[eg];B[kk]LB[qq:a][dj:b][ck:c][qp:d]N[Figure 1] ;W[me]FG[257:Figure 2];B[kf];W[ke];B[lf];W[jf];B[jg] (;W[mf];B[if];W[je];B[ig];W[mg];B[mj];W[mq];B[lq];W[nq] (;B[lr];W[qq];B[pq];W[pr];B[rq];W[rr];B[rp];W[oq];B[mr];W[oo];B[mn] (;W[nr];B[qp]LB[kd:a][kh:b]N[Figure 2] ;W[pk]FG[257:Figure 3];B[pm];W[oj];B[ok];W[qr];B[os];W[ol];B[nk];W[qj] ;B[pi];W[pl];B[qm];W[ns];B[sr];W[om];B[op];W[qi];B[oi] (;W[rl];B[qh];W[rm];B[rn];W[ri];B[ql];W[qk];B[sm];W[sk];B[sh];W[og] ;B[oh];W[np];B[no];W[mm];B[nn];W[lp];B[kp];W[lo];B[ln];W[ko];B[mo] ;W[jo];B[km]N[Figure 3]) (;W[ql]VW[ja:ss]FG[257:Dia. 6]MN[1];B[rm];W[ph];B[oh];W[pg];B[og];W[pf] ;B[qh];W[qe];B[sh];W[of];B[sj]TR[oe][pd][pc][ob]LB[pe:a][sg:b][si:c] N[Diagram 6])) (;W[no]VW[jj:ss]FG[257:Dia. 5]MN[1];B[pn]N[Diagram 5])) (;B[pr]FG[257:Dia. 4]MN[1];W[kq];B[lp];W[lr];B[jq];W[jr];B[kp];W[kr];B[ir] ;W[hr]LB[is:a][js:b][or:c]N[Diagram 4])) (;W[if]FG[257:Dia. 3]MN[1];B[mf];W[ig];B[jh]LB[ki:a]N[Diagram 3])) (;W[oc]VW[aa:sk]FG[257:Dia. 2]MN[1];B[md];W[mc];B[ld]N[Diagram 2])) (;B[qe]VW[aa:sj]FG[257:Dia. 1]MN[1];W[re];B[qf];W[rf];B[qg];W[pb];B[ob] ;W[qb]LB[rg:a]N[Diagram 1]))

  熟悉編寫文本解析器的程序員朋友應該都清楚,根據EBNF定義,編寫對應的解析器,是相當簡單和直觀的,貌似只是一項翻譯性的工作。本人實現SGF解析器,再次印證了這個觀點,大部分情況下,我只是按部就班地將EBNF翻譯為C語言代碼而已,呵呵。

  我首先設計了“SGFParseContext”結構,用于保存解析器工作期間的相關數據:

typedef struct _tagSGFParseContext { void* pUserData; int treeIndex; PFN_ON_TREE pfnOnTree; PFN_ON_TREE_END pfnOnTreeEnd; PFN_ON_NODE pfnOnNode; PFN_ON_NODE_END pfnOnNodeEnd; PFN_ON_PROPERTY pfnOnProperty; char idBuffer[16]; char* valueBuffer; int valueBufferSize; } SGFParseContext;

  相應的還有初始化和清理SGFParseContext結構的函數,initSGFParseContext, cleanupSGFParseContext,皆不是本解析器的關鍵,略過不提。

  接著我(liigo)設計了五個回調函數的函數原形:

typedef void (*PFN_ON_TREE) (SGFParseContext* pContext, const char* szTreeHeader, int treeIndex); typedef void (*PFN_ON_TREE_END) (SGFParseContext* pContext, int treeIndex); typedef void (*PFN_ON_NODE) (SGFParseContext* pContext, const char* szNodeHeader); typedef void (*PFN_ON_NODE_END) (SGFParseContext* pContext); typedef void (*PFN_ON_PROPERTY) (SGFParseContext* pContext, const char* szID, const char* szValue);

  這五個回調函數,將分別在解析器解析到“樹開始”“樹結束”“節點開始”“節點結束”“遇到屬性”時,由解析器調用。解析器調用每個回調函數時,都會傳入必需的參數,供回調函數即時取用。

  下面正式開始解析工作。整個解析器被分為 parseProperty, parseNode, parseNodeSequence, parseGameTree, parseSGF 幾大部分順序解析,屬于至底向上的分析實現模式。這幾大部分,也分別對應著SGF的EBNF定義中的某一項。所有解析函數都接收參數 const char* szCollection, int fromPos,之前的解析函數將決定后續解析函數的起始解析位置。

  第一步,解析屬性(parseProperty)。此處關鍵的是要定位到屬性值(szValue)開始和結束符號“[”和“],兩者之間的是屬性值,“[”之前的則是屬性標識(szID)。由于[和]之間可能存在轉義字符“\”,不能簡單地搜索字符“]”,必須花相當篇幅的代碼處理轉義字符(我用局部變量in_escape記錄轉義狀態并進行分別處理)。此外要為提取出的屬性標識和屬性值分配足夠的存儲空間,以便傳遞到用戶回調函數,前者不會太長使用靜態分配,后者變長則使用動態分配(同時自動預分配存儲空間,緩存,避免頻繁申請內存)。代碼如下:

//Property: id[value] int parseProperty(SGFParseContext* pContext, const char* szCollection, int fromPos) { const char* szFromPos; int lindex; int nIDBufferSize = sizeof(pContext->idBuffer) - 1; assert(szCollection && fromPos >= 0); szFromPos = szCollection + fromPos; lindex = findchar(szFromPos, -1, '['); assert(lindex > 0 && lindex < nIDBufferSize); if(lindex > 0 && lindex < nIDBufferSize) { memcpy(pContext->idBuffer, szFromPos, lindex); pContext->idBuffer[lindex] = '\0'; if(isTextPropertyID(pContext->idBuffer)) { //parse the text or simple-text value, consider the '\' escape character const char* s = szFromPos + lindex + 1; char c; int in_escape = 0; int valuelen = 0; getEnoughBuffer(pContext, 1024); pContext->valueBuffer[0] = '\0'; while(1) { c = *s; assert(c); if(!in_escape) { if(c == '\\') { in_escape = 1; } else if(c == ']') { break; } else { getEnoughBuffer(pContext, valuelen + 1); pContext->valueBuffer[valuelen++] = c; } } else { //ignore the newline after '\' if(c != '\r' && c != '\n') { getEnoughBuffer(pContext, valuelen + 1); pContext->valueBuffer[valuelen++] = c; } else { char nc = *(s+1); if(nc) { if((c=='\r' && nc=='\n') || (c=='\n' && nc=='\r')) s++; } } in_escape = 0; } s++; } getEnoughBuffer(pContext, valuelen + 1); pContext->valueBuffer[valuelen] = '\0'; if(pContext->pfnOnProperty) pContext->pfnOnProperty(pContext, pContext->idBuffer, pContext->valueBuffer); return (s - szCollection + 1); } else { int rindex = findchar(szFromPos, -1, ']'); int nNeedBufferSize = rindex - lindex - 1; assert(rindex >= 0); getEnoughBuffer(pContext, nNeedBufferSize); memcpy(pContext->valueBuffer, szFromPos + lindex + 1, nNeedBufferSize); pContext->valueBuffer[nNeedBufferSize] = '\0'; if(pContext->pfnOnProperty) pContext->pfnOnProperty(pContext, pContext->idBuffer, pContext->valueBuffer); return (fromPos + rindex + 1); } } return -1; }

  第二步,解析節點(parseNode)。分號“;”跟后面N個屬性,一個while循環調用parseProperty()逐個解析屬性即可:

//Node: ; {property} int parseNode(SGFParseContext* pContext, const char* szCollection, int fromPos) { const char* szFromPos = szCollection + fromPos; assert(fromPos >= 0); //assert(szFromPos[0] == ';'); if(pContext->pfnOnNode) pContext->pfnOnNode(pContext, szFromPos); if(szFromPos[0] == ';') { fromPos++; szFromPos++; } while(1) { fromPos += skipSpaceChars(szFromPos, NULL); if(szCollection[fromPos] == '\0' || findchar(";)(", -1, szCollection[fromPos]) >= 0) break; fromPos = parseProperty(pContext, szCollection, fromPos); szFromPos = szCollection + fromPos; } return fromPos; }

  第三步,解析節點序列(parseNodeSequence)。節點的順序排列,至少有一個節點,后面可能還有0個或多個節點。仍然是一個while循環搞定:

//NodeSequence: node{node} int parseNodeSequence(SGFParseContext* pContext, const char* szCollection, int fromPos) { const char* szFromPos = szCollection + fromPos; assert(fromPos >= 0); //assert(szFromPos[0] == ';'); while(1) { fromPos = parseNode(pContext, szCollection, fromPos); fromPos += skipSpaceChars(szFromPos, NULL); szFromPos = szCollection + fromPos; if(szFromPos[0] != ';') { if(pContext->pfnOnNodeEnd) pContext->pfnOnNodeEnd(pContext); break; } } return fromPos; }

  第四步,解析樹(parseGameTree)。樹是一個嵌套結構,最外層是一對括號“(”“)”,里面是N個節點序列或N個嵌套的子樹。仍然用一個while循環搞定,遇到“(”則遞歸調用parseGameTree()解析樹或其子樹,否則調用parseNodeSequence()解析節點序列。代碼如下:

//GameTree: ( {[NodeSequence]|[GameTree]} ) //old GameTree: ( NodeSequence {GameTree} ) int parseGameTree(SGFParseContext* pContext, const char* szCollection, int fromPos) { char c; const char* szFromPos = szCollection + fromPos; assert(fromPos >= 0); assert(szFromPos[0] == '('); pContext->treeIndex++; if(pContext->pfnOnTree) pContext->pfnOnTree(pContext, szFromPos, pContext->treeIndex); fromPos++; szFromPos++; fromPos += skipSpaceChars(szFromPos, NULL); c = szCollection[fromPos]; while(1) { if(c == '(') fromPos = parseGameTree(pContext, szCollection, fromPos); else fromPos = parseNodeSequence(pContext, szCollection, fromPos); szFromPos = szCollection + fromPos; fromPos += skipSpaceChars(szFromPos, NULL); c = szCollection[fromPos]; if(c == ')') { if(pContext->pfnOnTreeEnd) pContext->pfnOnTreeEnd(pContext, pContext->treeIndex); pContext->treeIndex--; break; } } return (fromPos + 1); }

  第五步,最后一步了,解析整個SGF文本內容(parseSGF)。這是對外公開的核心接口。N個樹的順序排列,好辦呀,循環調用parseGameTree()順序解析各個樹不就OK了?代碼如下:

//SGFCollection: GameTree {GameTree} int parseSGF(SGFParseContext* pContext, const char* szCollection, int fromPos) { const char* szFromPos = szCollection + fromPos; assert(fromPos >= 0); assert(szFromPos[0] == '('); pContext->treeIndex = -1; while(1) { fromPos = parseGameTree(pContext, szCollection, fromPos); fromPos += skipSpaceChars(szFromPos, NULL); szFromPos = szCollection + fromPos; if(szFromPos[0] != '(') break; } return fromPos; }

  測試代碼:

int main(int argc, char *argv[]) { char* s; int x; SGFParseContext Context; //initSGFParseContext(&Context, onTree, onTreeEnd, onNode, onNodeEnd, onProperty, NULL); initSGFParseContext(&Context, onTree2, onTreeEnd2, onNode2, onNodeEnd2, onProperty2, NULL); //test parse property: { s = "AB[cdef]X[xyz]"; printf("\ntest parse property: ----- \n"); x = parseProperty(&Context, s, 0); x = parseProperty(&Context, s, 8); s = "C[ab\\]cd]"; x = parseProperty(&Context, s, 0); } //test parse node: { s = ";A[a]BB[bb]C[]"; printf("\ntest parse node: ----- \n"); x = parseNode(&Context, s, 0); s = ";A[a];BB[bb]C[]"; x = parseNode(&Context, s, 0); x = parseNodeSequence(&Context, s, 0); } //test parse tree: { printf("\ntest parse tree: ----- \n"); s = "(;A[a](;C[c](X[x])Z[z]);D[d](;E[e](F[ff])))"; x = parseGameTree(&Context, s, 0); } #if 1 //parse real sgf file: { int len = 0; void* data = NULL; FILE* pfile = fopen("d:\\x.txt", "r"); printf("\n---------- test parse real sgf file: -------- \n"); if(pfile) { fseek(pfile, 0, SEEK_END); len = ftell(pfile); assert(len > 0); fseek(pfile, 0, SEEK_SET); data = malloc(len); assert(data); fread(data, 1, len, pfile); parseSGF(&Context, data, 0); fclose(pfile); pfile = NULL; } } #endif { char c; printf("\n----- any key to exit: ----- \n"); fflush(stdout); scanf("%c", &c); } }

  總結:整個SGF解析器結構比較清晰,只要按照EBNF定義,按部就班地逐步處理即可,不是特別復雜。但由于牽涉到文本、指針、遞歸,有許多細節需要注意。各位朋友不妨評估一下,自己需要花費多久可以寫出類似這樣一個SGF解析器?如果時間充裕,也不妨真的動手寫一下,看看是否眼高手低呢?所謂的“重復發明輪子”,并非絕對的毫無意義,至少可以鍛煉我的動手能力。

  另外,有一個設計上的取舍,不知是較好還是較壞。所有的回調函數,目前都有一個 SGFParseContext* pContext ,而此前相同位置的參數是 void* pUserData。是后來考慮到回調函數可能需要訪問SGFParseContext中的相關數據(如在PFN_ON_NODE中讀取treeIndex),為了方便用戶使用才引入pContext參數(用戶也可以通過pUserData自行傳入pContext,終究是多了一步)。目前的做法,似乎暴露了解析器內部結構(SGFParseContext),又似乎增強了回調函數的穩定性和擴展性(即使不改變函數原形也能通過pContext提供額外參數)。

  雖然這個SGF解析器已應用到開源軟件“M8圍棋譜”(http://code.google.com/p/m8weiqipu/)中,并初步達到了實用目的,但并不能保證該解析器已達到工業強度,其實有不少情況尚未測試到,必然會有疏忽錯漏之處,誠請各位朋友批評指正。

  另注,考慮到與現有SGF格式文件的兼容性,對SGF規范中的EBNF稍做了一定擴展。

  完整源代碼請參見:
http://code.google.com/p/m8weiqipu/source/browse/trunk/sgf.h
http://code.google.com/p/m8weiqipu/source/browse/trunk/sgf.c

轉載于:https://www.cnblogs.com/fortest/archive/2009/09/06/2056928.html

總結

以上是生活随笔為你收集整理的用C语言实现SGF格式围棋棋谱解析器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

婷婷综合在线 | 成人黄色电影在线观看 | 久热av | 丁香婷婷电影 | 精品国产资源 | 免费看的黄色的网站 | 日本特黄一级片 | 亚洲va男人天堂 | 久久国产精品视频免费看 | 久久av免费| wwwww.国产| 国产高清在线a视频大全 | 久久综合精品国产一区二区三区 | 夜夜澡人模人人添人人看 | 狠狠色狠狠色终合网 | 最近中文字幕完整视频高清1 | 亚洲一级久久 | 中文字幕亚洲精品在线观看 | av中文字幕在线观看网站 | 狠狠地操 | 91九色蝌蚪在线 | 操处女逼| 欧美精品v国产精品 | 国产精品专区h在线观看 | 国产一级片免费播放 | 久草在线电影网 | 成人在线视频你懂的 | 91精品国产福利 | 国产精品久久久久久久久久久久午夜 | 18+视频网站链接 | 最近中文字幕免费av | 1024在线看片| 日韩免费视频一区二区 | 国产婷婷vvvv激情久 | 91av视屏| 亚洲一区视频在线播放 | 一区视频在线 | 国产视频精选 | 亚洲日韩欧美一区二区在线 | 国产露脸91国语对白 | av丝袜美腿 | 亚洲高清在线 | 日韩av中文在线 | 99高清视频有精品视频 | 在线观看精品 | 色综合夜色一区 | 国产不卡在线观看 | 九九九热精品 | 色综合国产 | 亚洲一区网 | 99视频在线看 | 中文字幕乱码日本亚洲一区二区 | 日本精品久久久久 | 中文字幕精品www乱入免费视频 | 99久久精品免费看国产 | 久久a免费视频 | av在线收看 | 91在线免费观看网站 | 国产一区二区久久精品 | 成人三级黄色 | 少妇性bbb搡bbb爽爽爽欧美 | 亚洲午夜久久久久 | 国产涩图| 中文字幕精品三级久久久 | 国产精品一区二区久久精品 | 色黄久久久久久 | 免费av网址在线观看 | 97福利视频 | 人人干人人添 | 丁香六月在线 | 中文字幕在线乱 | 亚洲资源在线 | 99精品久久精品一区二区 | 一区二区三区精品在线视频 | 色婷久久 | 亚洲综合欧美激情 | 久久这里| 99久久久国产精品美女 | 一本到在线 | 日韩精品一区二区电影 | 亚洲欧美日本国产 | 久久超级碰视频 | 91热视频在线观看 | 国产精品精品国产婷婷这里av | 久久久久免费视频 | 日韩和的一区二在线 | 九九免费观看视频 | 日韩激情视频在线 | 精品人人人人 | 91精品国产99久久久久久久 | 亚洲一区精品人人爽人人躁 | 91av片| 日日夜色| 九九视频精品在线 | 亚洲欧美日韩在线一区二区 | 国产资源在线视频 | 黄色av成人在线观看 | 国外成人在线视频网站 | 91天堂影院 | 涩涩色亚洲一区 | 久久99久久99精品免视看婷婷 | 久久精品波多野结衣 | 丁香六月av | 婷婷国产v亚洲v欧美久久 | 国产亚洲字幕 | www.久久免费视频 | 国产精品99久久久久久小说 | 成人黄色国产 | 亚洲精品国产精品久久99热 | av免费观看网站 | 免费观看版 | 国产精品黄色影片导航在线观看 | 美女亚洲精品 | 亚洲精品乱码久久久久久蜜桃欧美 | 日韩在线视频播放 | 国语黄色片 | 人人射人人爱 | 国产日韩在线观看一区 | 亚洲 av网站 | 国产精品99免费看 | 天天综合中文 | 色婷婷福利 | 久草在线视频资源 | 日本在线观看视频一区 | 久久99热精品这里久久精品 | 婷婷丁香花五月天 | 日韩黄色大片在线观看 | 婷婷久操 | 国产成人精品一二三区 | 天天操综合网站 | 欧美日韩免费观看一区=区三区 | 日韩欧美一区二区三区免费观看 | 天天摸夜夜添 | 一区二区视频电影在线观看 | 久久视频这里有久久精品视频11 | 欧美综合国产 | 高清精品久久 | 免费看十八岁美女 | 欧美孕妇与黑人孕交 | 久热色超碰 | 99视频在线免费 | 国产国语在线 | 亚洲第一中文字幕 | 日韩极品在线 | 日韩免费电影一区二区三区 | japanese黑人亚洲人4k | 色综合久久中文字幕综合网 | 久草在线免费看视频 | 国产一区二区三区高清播放 | 国产一级二级在线播放 | 久草视频免费 | 久久久免费高清视频 | 天堂va在线观看 | 97在线免费 | 中文字幕一区二区三区在线视频 | 精品伦理一区二区三区 | 成人在线电影观看 | 一区二区三区 中文字幕 | 精品久久久99 | 97超碰国产在线 | 色噜噜在线观看 | 欧美一级在线观看视频 | 成人中文字幕+乱码+中文字幕 | 91av综合 | 久久高清免费观看 | 99久热 | 青青久草在线 | 色诱亚洲精品久久久久久 | 91最新在线观看 | 91视频啊啊啊 | 99精品美女| 粉嫩一区二区三区粉嫩91 | 久久黄色网 | 福利视频导航网址 | 91精品国产91 | 国产精品第二十页 | 最近中文字幕mv免费高清在线 | 成人国产精品久久久春色 | 在线观看视频国产一区 | 国产成人在线综合 | 国产精品成人国产乱 | 永久免费精品视频 | 最近中文字幕在线播放 | 日韩特黄av| 日韩高清 一区 | 9999国产| 97自拍超碰| 最新av免费在线观看 | 手机在线视频福利 | 精品影院一区二区久久久 | 综合网中文字幕 | 久久九九免费视频 | 午夜国产福利视频 | 日韩动漫免费观看高清完整版在线观看 | 天天躁日日躁狠狠躁av麻豆 | 国产精品久久99精品毛片三a | 亚洲综合在线五月天 | 成人久久18免费网站麻豆 | 久久久国际精品 | 人人插人人艹 | 亚洲精品久久久蜜臀下载官网 | 天堂入口网站 | 亚洲黄色精品 | 精品久久精品久久 | 激情网五月 | 午夜视频亚洲 | 国产999精品久久久 免费a网站 | 成人毛片a| 欧美精品黑人性xxxx | 激情婷婷网 | 中文乱幕日产无线码1区 | 国产精品国产亚洲精品看不卡15 | 2024国产在线 | 久久精品精品电影网 | 日韩欧美在线视频一区二区三区 | 成人av在线直播 | 国产v视频 | 国产又黄又猛又粗 | 亚洲综合在线观看视频 | 中文字幕中文字幕在线中文字幕三区 | 午夜丰满寂寞少妇精品 | 国产一区二区视频在线 | 日韩在线观看一区 | 色网站免费在线观看 | 久久久久久久av麻豆果冻 | jizz18欧美18 | 欧美色图视频一区 | 一区精品在线 | 国产色女| 久久视频在线看 | 久久草草影视免费网 | 黄色看片 | 亚洲aaa毛片| 国产一线二线三线在线观看 | www日韩欧美 | 精品乱码一区二区三四区 | 夜色资源站wwwcom | 99精品国产兔费观看久久99 | 蜜桃视频在线观看一区 | 久久看片网站 | 天堂av免费观看 | 国产一区二区三精品久久久无广告 | 人人爽人人爽人人片 | 日韩乱色精品一区二区 | 日韩欧美亚洲 | 亚洲最大激情中文字幕 | av在线免费播放网站 | 国产小视频在线看 | 久久综合婷婷综合 | 狠狠操欧美 | 免费观看午夜视频 | 91喷水| 一二三区av | 天天操天天添天天吹 | 亚洲国产精品久久 | 免费高清看电视网站 | 97超碰人人看 | 国产亚洲婷婷 | 99久久精品免费看国产 | 91成人精品一区在线播放69 | 午夜视频久久久 | 偷拍精偷拍精品欧洲亚洲网站 | 97超碰资源总站 | 国产精品自在线 | 亚洲一区二区观看 | 91免费观看国产 | 亚洲日本在线一区 | 日韩理论视频 | 五月天久久久久 | 国产欧美在线一区二区三区 | 成人h视频在线播放 | 日韩高清二区 | 久久久蜜桃 | 精品视频国产一区 | 玖草影院 | 99午夜| 91国内产香蕉| 香蕉精品视频在线观看 | 亚洲日韩精品欧美一区二区 | 日韩在线播放欧美字幕 | 亚洲日本色 | 人人插人人做 | 欧美日韩国产色综合一二三四 | 中文字幕91视频 | 五月婷婷丁香网 | 亚洲天堂va| 欧美久久久久久久久久 | 国产成人精品亚洲日本在线观看 | 国产精品嫩草影院99网站 | 日韩免费播放 | 91日韩国产| 夜夜爽88888免费视频4848 | 日日夜夜免费精品 | 日本一区二区高清不卡 | 在线观看91视频 | 久久久久久免费网 | 欧美日韩在线观看一区二区 | 国产精品永久久久久久久久久 | 亚洲综合一区二区精品导航 | 久久无码av一区二区三区电影网 | 91精品国自产在线观看欧美 | 99精品视频99 | 免费99视频 | 成人av动漫在线观看 | 亚洲影视九九影院在线观看 | 国产福利91精品一区 | 成年人免费看片网站 | 久久免费国产精品1 | 国产小视频精品 | 日韩av网页 | 韩国av免费在线 | 在线 高清 中文字幕 | 一区二区三区四区在线 | 色综合久久88色综合天天免费 | 91色国产在线 | 亚洲综合成人av | 国内小视频在线观看 | 欧美日韩中文在线 | 视频在线观看入口黄最新永久免费国产 | 欧美精品v国产精品v日韩精品 | 四虎国产精| 欧美日韩1区2区 | 99成人免费视频 | 国产高清在线 | 久久综合成人 | 色婷婷电影| 国产91精品在线播放 | 国产在线精品一区二区不卡了 | 亚洲综合在线一区二区三区 | av电影在线播放 | 色婷婷久久一区二区 | 成人动漫一区二区三区 | 中文字幕免费高清 | 91免费黄视频 | 日韩精品免费在线观看 | 欧美作爱视频 | 日韩欧美国产激情在线播放 | 超碰人人草 | www.久久久精品 | 国产视频午夜 | 九月婷婷人人澡人人添人人爽 | 免费视频一区二区 | 免费a v在线| 日韩中文免费视频 | 天天综合视频在线观看 | 欧美a级成人淫片免费看 | 97免费在线观看视频 | 国产日产精品一区二区三区四区的观看方式 | 久久69精品久久久久久久电影好 | 91欧美视频网站 | 黄色中文字幕在线 | 日韩精品一区二区三区在线视频 | 国产视频一区在线播放 | 日韩黄色大片在线观看 | 97偷拍视频| 毛片3| 在线观看成人国产 | 国产成人一区二区三区在线观看 | 91视频在线观看大全 | 国产一级片免费视频 | 日日夜夜干| 日韩精品三区四区 | 丝袜护士aⅴ在线白丝护士 天天综合精品 | 午夜婷婷在线播放 | 成人在线小视频 | 狠狠干网址 | 国产探花视频在线播放 | 久久一区91 | 黄色软件视频大全免费下载 | 国产不卡毛片 | 天天操夜夜爱 | 日韩欧美视频一区二区三区 | 亚洲激情电影在线 | av电影在线免费 | 久久久久高清毛片一级 | 狠狠躁夜夜av | 国产一级片在线播放 | 美女网站在线播放 | 久久久久久久免费观看 | 波多野结衣一区二区三区中文字幕 | 欧美日韩中文国产 | 久久久午夜精品理论片中文字幕 | 成人污视频在线观看 | 91人人爽人人爽人人精88v | 久久女教师 | 黄色av网站在线免费观看 | 九九综合久久 | 成人99免费视频 | 久久国产美女视频 | 黄色1级毛片 | 国产成人精品亚洲a | 日韩精品久久一区二区 | 中文av一区二区 | 国产精品毛片 | 人人揉人人揉人人揉人人揉97 | 免费精品在线 | 一区二区视频播放 | 在线观看黄色小视频 | 午夜精品久久久久久中宇69 | 久久不卡日韩美女 | 91传媒在线| 欧美高清视频不卡网 | 亚洲精品美女免费 | 中文字幕在线观看亚洲 | 黄色在线视频网址 | 伊人射 | 中文字幕91在线 | 最近日韩中文字幕中文 | 91网址在线观看 | 99在线精品免费视频九九视 | 免费观看91视频大全 | 干天天| 激情av一区二区 | 精品视频999 | 中文永久免费观看 | 亚洲免费公开视频 | 国产日产欧美在线观看 | 激情五月***国产精品 | 99久久日韩精品视频免费在线观看 | 成人一级视频在线观看 | 婷婷在线网 | 久草精品视频 | 香蕉视频网站在线观看 | 91中文在线| 婷婷久久五月天 | 探花视频免费在线观看 | 香蕉影院在线观看 | 亚洲日本精品 | 久久久免费 | 日韩中文字幕在线 | 91探花在线 | 国产色视频网站 | 国产精品成人一区 | 99久久久国产免费 | 最新在线你懂的 | 久久激情视频 | 在线综合 亚洲 欧美在线视频 | 欧美xxxxx在线视频 | 国产精品美女久久久久久久网站 | 欧美激情综合五月 | 又色又爽又黄高潮的免费视频 | 成人h视频在线 | 国产精品一区二区在线观看 | 9热精品| 国产你懂的在线 | 精品国产乱码一区二区三区在线 | 国产精品theporn | 欧美激情亚洲综合 | 久久精品国产亚洲aⅴ | 国产欧美精品在线观看 | www.五月天激情 | 麻豆精品视频在线观看免费 | 国产a级精品 | 韩国在线视频一区 | 国产淫片免费看 | 欧美xxxx性xxxxx高清 | 日韩影视在线观看 | 国产一级视频在线观看 | 五月花丁香婷婷 | 五月开心六月婷婷 | 中文字幕av一区二区三区四区 | 久久久精品久久日韩一区综合 | 久久久999免费视频 日韩网站在线 | 九九视频免费观看视频精品 | 日韩性片| 91在线中文| 国产一区二区手机在线观看 | 日韩理论电影在线观看 | 国产精品乱码久久久久 | 在线成人中文字幕 | 高清日韩一区二区 | 天天插综合网 | 国产精品久久久免费看 | 成人毛片a | 日韩欧美精品在线观看视频 | 国产二区免费视频 | 丁香视频在线观看 | 久久免费高清视频 | 精品黄色片 | 99在线视频观看 | 亚洲精品看片 | 五月婷婷影院 | 国产成人av综合色 | 狠狠躁日日躁 | 中文字幕资源网 | 亚洲视频一区二区三区在线观看 | 国产xxxx | 亚洲精品免费在线观看视频 | 99久久日韩精品免费热麻豆美女 | 69国产盗摄一区二区三区五区 | 久久国产精品久久w女人spa | av三区在线 | 久久免费视频播放 | 精品一区二区精品 | 成人av一区二区兰花在线播放 | 在线不卡视频 | 日韩一区二区三区不卡 | 成人黄色av网站 | 999精品视频 | 国产精品免费视频一区二区 | av在线播放网址 | 超碰97.com | 在线看污网站 | 探花视频在线观看免费 | 激情五月看片 | 色香蕉网 | 久久97久久97精品免视看 | 中文字幕免费看 | 狠狠色丁香婷综合久久 | 日韩色在线观看 | 久久综合九色 | 欧美在线a视频 | 亚洲国产av精品毛片鲁大师 | 欧美日韩在线观看视频 | 日韩资源在线观看 | 国产精品一区二区av | 一二三精品视频 | 国产偷在线 | 色综合欧洲 | 亚洲人在线7777777精品 | 一区二区视频播放 | 国产精品乱码久久久久 | 色在线视频网 | 激情五月在线 | 91av中文字幕 | 亚洲 欧洲 国产 日本 综合 | 日韩视频精品在线 | 久久电影中文字幕视频 | 天天色天天射天天操 | 五月婷婷在线观看 | 超碰免费久久 | 久青草电影 | 精品一区二区三区在线播放 | 黄色福利视频网站 | 亚洲激情一区二区三区 | 91在线中文| 天堂av影院 | 丁香六月婷 | 国产va饥渴难耐女保洁员在线观看 | 国产精品女主播一区二区三区 | 九九精品视频在线 | 久久视精品 | 成人黄色在线观看视频 | 国产精品一区免费在线观看 | 国产精品一区二区三区久久久 | 中文字幕在线观看国产 | 免费国产黄线在线观看视频 | 欧美夫妻性生活电影 | 五月天久久综合 | 国产专区一| 国产免费观看高清完整版 | 国产传媒中文字幕 | 国产人成精品一区二区三 | 中文字幕精品一区久久久久 | 国产视频亚洲视频 | 国产精品成人免费精品自在线观看 | 欧美日韩国产欧美 | 久久精品一区二区三区中文字幕 | 亚洲精品乱码久久久久久 | 视频一区二区国产 | 日本 在线 视频 中文 有码 | 久久免费看av | 色狠狠综合天天综合综合 | 免费视频一二三区 | 国产三级午夜理伦三级 | 亚洲国产成人av网 | 国产在线色站 | 99草视频在线观看 | 最近中文字幕在线中文高清版 | 亚洲视频一 | 97电影手机版 | 国产大片免费久久 | 日本系列中文字幕 | 久久亚洲国产精品 | 色婷婷在线视频 | 日韩色爱 | 18网站在线观看 | 亚洲国产精品久久 | 就色干综合 | 国产在线91精品 | 国产精品 999 | 亚洲国产成人在线观看 | www.成人精品 | 欧美在线1| 久久国际影院 | 国产91精品在线观看 | 91精品毛片 | www.神马久久| 中文字幕日本在线观看 | 就要色综合| 久久久久久久久久亚洲精品 | 国产精久久久久久妇女av | 亚洲激情视频在线观看 | 97天天干| 中文字幕在线看人 | 九九精品在线观看 | 亚洲 欧美 日韩 综合 | 美女网站在线 | 最新国产一区二区三区 | 天天干天天做 | 国产中年夫妇高潮精品视频 | av手机在线播放 | 欧美在线观看禁18 | 亚洲国产三级在线 | 天天操偷偷干 | www.五月婷婷 | 日本精品久久久久中文字幕 | www.69xx| 国内精品久久久久久久影视简单 | 超级碰视频 | 狠狠色伊人亚洲综合网站野外 | 最近中文字幕大全 | 五月宗合网| 久久撸在线视频 | 99久高清在线观看视频99精品热在线观看视频 | 亚洲 综合 国产 精品 | 久久婷婷综合激情 | 日日夜夜草 | 精品视频一区在线观看 | 国产精品福利视频 | 欧美日高清视频 | 最近日本韩国中文字幕 | 婷婷丁香导航 | 欧美日韩免费一区二区 | 久久综合九色综合欧美就去吻 | 色婷久久 | www.夜夜操.com | 国产精品自拍在线 | 日韩 国产 | 一级特黄aaa大片在线观看 | 美女精品网站 | 在线国产片| 亚洲在线黄色 | 91精品国产一区 | 午夜av片 | 国产精品精品久久久久久 | 国产中文字幕一区 | 精品国产乱码久久久久久1区二区 | 久在线观看视频 | 日韩视频一区二区三区在线播放免费观看 | 午夜av大片 | 精品毛片久久久久久 | 国产99久久99热这里精品5 | 亚洲免费成人 | 国产九九九精品视频 | 日韩成人一级大片 | 99婷婷狠狠成为人免费视频 | 天天射日 | 日本久久综合网 | 伊人午夜 | 国产小视频在线观看免费 | 91中文字幕 | 三级av在线免费观看 | 国产精品午夜8888 | 99 精品 在线 | 国产精品2019 | 99久久精品无码一区二区毛片 | 黄色视屏av | 久草在线视频网站 | 日本动漫做毛片一区二区 | 欧美极品少妇xbxb性爽爽视频 | 婷婷激情五月综合 | 婷婷久久综合九色综合 | 在线国产能看的 | 久久久久久蜜桃一区二区 | 亚洲男男gaygay无套同网址 | 国产亚洲精品久久久久秋 | 久久午夜网 | 日韩亚洲欧美中文字幕 | 在线看的av网站 | 久久亚洲国产精品 | 99久久婷婷国产精品综合 | 国产专区在线 | 国产免费观看视频 | 欧美高清成人 | 激情久久小说 | 国内揄拍国产精品 | 日韩欧美亚州 | 超碰人人在线 | 99视频国产在线 | 午夜美女wwww | 天天玩天天干天天操 | 国产精品视频永久免费播放 | 久久有精品 | 婷婷丁香国产 | 99精品国产99久久久久久97 | 久久久免费在线观看 | 久久久一本精品99久久精品 | 国产精品网站 | 国产中的精品av小宝探花 | 亚洲三级网站 | 91香蕉视频黄色 | 国产精品成人一区二区三区 | 麻豆视频免费看 | 狠狠的操狠狠的干 | 国内丰满少妇猛烈精品播放 | 久久久久国产免费免费 | 麻豆视频大全 | 久久99亚洲精品久久久久 | 免费一区在线 | 免费观看国产视频 | 久久久 精品 | 91一区二区三区在线观看 | 热久久免费视频精品 | 97精品国产91久久久久久 | 欧美日韩一区二区三区在线观看视频 | 天天操夜夜曰 | 在线免费观看涩涩 | 一区二区三区免费在线观看视频 | 久久久免费| 亚洲欧美国产视频 | 欧美日比视频 | 亚洲日韩精品欧美一区二区 | 五月天堂色 | 精品免费视频123区 午夜久久成人 | 国内一区二区视频 | 香蕉视频网站在线观看 | 婷婷深爱| 人成电影网 | 免费人成在线观看网站 | 成人a免费视频 | 日韩久久午夜一级啪啪 | 中文字幕在线观看网址 | 黄色最新网址 | 国产视频久久久久 | 国精产品999国精产品视频 | 九色精品免费永久在线 | 亚洲精品国产精品国自产观看 | 国产日韩精品久久 | 日韩欧美大片免费观看 | 日韩欧美在线观看一区 | 狠狠色噜噜狠狠 | 国产精品电影在线 | 九九在线国产视频 | 中文字幕亚洲欧美日韩 | 91在线精品播放 | 国产人成一区二区三区影院 | 在线看的av网站 | 九九九九九国产 | 久久久久日本精品一区二区三区 | 亚洲免费不卡 | 99精品美女 | 日韩久久午夜一级啪啪 | 天天天操天天天干 | 日韩av成人在线观看 | 中文字幕黄色网址 | 天天在线视频色 | 亚洲深夜影院 | 国产中文字幕三区 | 国产视频精品免费 | 国产色综合 | 免费在线国产精品 | 免费毛片一区二区三区久久久 | 国产欧美精品在线观看 | 国产亚洲精品成人 | 久久99精品久久久久蜜臀 | 在线观看不卡的av | 美女黄频在线观看 | 欧美成人999 | 日韩一区二区三区高清在线观看 | 午夜精品久久久久久中宇69 | 在线免费国产视频 | 天天操天天摸天天干 | 日韩欧美在线第一页 | 丁香婷五月 | 国产精品18久久久久vr手机版特色 | 96视频免费在线观看 | 亚洲极色| 久久99热久久99精品 | 综合天天色 | 操操操av | 国产成人61精品免费看片 | 亚洲午夜精品在线观看 | 久保带人 | 天天操狠狠操网站 | 久久伦理网| 色99之美女主播在线视频 | 成人毛片a| 成人国产精品免费观看 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 日韩在线视频观看 | 在线观看成人一级片 | 国产精品第52页 | 在线观看亚洲精品 | 91成熟丰满女人少妇 | 日韩av电影一区 | 伊人色综合网 | 97成人在线观看视频 | 久久精品视频免费播放 | 又黄又爽的免费高潮视频 | 日本一区二区三区视频在线播放 | 天天干天天草天天爽 | www.久久婷婷 | 在线观看岛国av | 国产日本在线 | 精品国产精品久久一区免费式 | 亚洲成人资源在线 | 91爱爱中文字幕 | 亚洲日本中文字幕在线观看 | 亚洲韩国一区二区三区 | 五月婷婷欧美 | 91视频三区| 91精品视频在线 | 在线免费看黄网站 | 精品国产激情 | 碰超在线97人人 | 成人av高清 | 国产精品美女毛片真酒店 | 国产精品欧美久久久久久 | 精品99在线视频 | 欧美日韩1区 | 天天综合网国产 | 欧美精品乱码久久久久久 | 免费亚洲一区二区 | 久草在线免费播放 | 国产破处精品 | 亚洲免费激情 | 久久老司机精品视频 | 亚洲天堂在线观看完整版 | 午夜精品久久久久久久99 | av看片在线观看 | 天天草天天草 | 黄色成人影视 | 日日插日日干 | 欧美日韩一区久久 | 久草视频在线看 | 视频在线观看91 | 毛片99 | 亚州中文av | 欧美在线91 | 亚洲国产精品久久久久久 | 精品亚洲一区二区三区 | 国产午夜三级一二三区 | 日韩最新在线视频 | 色噜噜在线观看视频 | 国产亚洲精品美女久久 | 国产精品av免费观看 | v片在线播放 | 亚洲三级在线免费观看 | 中文字幕影片免费在线观看 | 免费av在线网站 | 亚洲人人网 | 久久99视频免费观看 | 韩国一区二区三区在线观看 | 人人干人人干人人干 | 国产精品久久一卡二卡 | 九九九九九九精品 | a黄色| 公与妇乱理三级xxx 在线观看视频在线观看 | 国内视频在线观看 | 在线免费亚洲 | 99视频免费看 | 久久久久久不卡 | 免费福利在线播放 | 国产精品视频在线观看 | 久9在线 | 成人动漫精品一区二区 | 国产又粗又猛又黄 | 超碰97中文 | 国产二区视频在线观看 | 亚洲无吗av | 91九色蝌蚪视频网站 | 亚洲涩涩色 | 免费在线国产视频 | 97狠狠操 | 精品国产一区二区三区在线观看 | 不卡av电影在线观看 | 日本精品视频在线播放 | 国产精品久久久久久久午夜 | 天堂va在线观看 | 婷婷综合电影 | 国产成人精品久久 | 久久久久国产精品免费网站 | 国产不卡视频在线播放 | 久久久福利视频 | 久久综合九色综合网站 | 69精品视频| 久久伦理影院 | 黄色三级在线 | 中文字幕高清视频 | 亚洲精品伦理在线 | 国产在线精品福利 | 久久久久久福利 | 激情影院在线观看 | 亚洲成人免费在线观看 | 国产小视频在线免费观看视频 | 欧美成人一区二区 | 国产成人福利在线 | 超碰日韩在线 | 日韩在线一区二区免费 | 免费av在线| 欧美日本中文字幕 | 9热精品| 在线观看中文字幕一区二区 | av在线com| 成年人视频在线免费观看 | 激情黄色av | 91中文在线视频 | 国产精品爽爽久久久久久蜜臀 | 一级黄色a视频 | 深夜免费网站 | 看av在线 | 亚洲精品视频在线免费播放 | 国产精品视频观看 | 久久久久久久久免费 | 日韩特黄一级欧美毛片特黄 | 久久成人精品电影 | 国产免费叼嘿网站免费 | 91久久精品一区二区三区 | 色吧久久| 国产精品一区二区免费在线观看 | 999一区二区三区 | www.av小说 | 国产高清免费在线播放 | 九九欧美 | 国产又粗又猛又黄又爽的视频 | 不卡av免费在线观看 | 亚洲成人午夜在线 | 天天操天天操天天操天天操天天操天天操 | 日韩中文字幕免费在线观看 | 天天干夜夜干 | 麻豆传媒在线视频 | 国产精品久久伊人 | 香蕉视频在线观看免费 | 又黄又爽又刺激 | 人人添人人澡 | 在线观看av免费观看 | 久久免费视屏 | 视频在线观看99 | 日韩中文字幕国产精品 | 国产精品久久久久久久久岛 | 天天久久综合 | 日韩经典一区二区三区 | 国产一区二区精品久久 | 日本精品免费看 | 波多野结衣在线视频免费观看 | 在线观看视频精品 | 久久久三级视频 | 中文字幕丝袜一区二区 | 欧美精品在线一区 | www.夜色.com| 久99久久| 夜夜骑日日 | 亚洲欧洲精品一区二区精品久久久 | 日韩欧美区 | 成人av一二三区 | 国产综合精品一区二区三区 | 色搞搞 | 人人涩| 在线色网站| 国产精品嫩草影院123 | 日韩av高清在线观看 | 国产精品久久二区 | 中文字幕日韩伦理 | 亚洲天堂网站视频 | 国产九九九精品视频 | 国产精品一区二区三区在线播放 | 色网免费观看 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 97理论电影| 精品一区精品二区 | 日韩免费三级 | 免费观看的黄色 | 午夜久久成人 | 国产成人在线观看 | 黄色av成人在线观看 | 一本色道久久综合亚洲二区三区 | 一区二区三区在线播放 | 国产黄色精品在线 | 在线播放 日韩专区 | 婷婷中文字幕 | 久久久久国产成人精品亚洲午夜 | 精品亚洲国产视频 | 韩日精品中文字幕 | 在线观看av不卡 | 综合久久网 | 在线有码中文 | 日韩av手机在线观看 | 一级片免费观看视频 | 久久久亚洲国产精品麻豆综合天堂 | 亚洲日本中文字幕在线观看 | 久久天天综合网 | 国产在线观看免费观看 | 91热| 国产成人精品久久亚洲高清不卡 | 91色九色 | 国产人成免费视频 | 日韩视频www| 91手机电视 | 久久久久久中文字幕 | 激情中文在线 | 成人性生交大片免费看中文网站 | 国产一区在线视频观看 | 在线观看视频国产 | 97成人在线 | 亚洲禁18久人片 | 国产xxxx | 综合婷婷丁香 |