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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

tcl把文本产生html,TCL脚本数据文件格式(译文)

發布時間:2025/3/21 编程问答 85 豆豆
生活随笔 收集整理的這篇文章主要介紹了 tcl把文本产生html,TCL脚本数据文件格式(译文) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

TCL腳本數據文件格式

簡介

一個典型的tcl腳本把它的內部數據保存在列表和數組(tcl中兩種主要的數據結構)中.比如,假定你想寫一個能將數據先保存在磁盤上,然后再讀取的tcl應用程序, 這將使你的用戶可以先把一個項目保存下來,以后再重新裝入.你需要一個辦法,把數據從其內部存儲處(列表與數組)寫入到一個文件中,同樣,也要有一個辦法把數據從文件中讀出裝入到正在運行的腳本中去.

你可以選擇把數據保存為二進制格式或文本格式.本文討論的僅限文本格式,我們將考慮幾種可能的數據格式及如何用tcl來進行分析.我們會特別介紹一些簡單的技巧,使文本文件分析更容易.

本文假定你對tcl語言很熟悉,至少已經用tcl語言寫過幾個腳本.

▲一個簡單的例子

假定你有一個簡單的繪圖工具,能把文本和長方形放到畫布上.為了保存畫好的圖,你需要一個必須容易讀取的文本格式的文件,最先想到而且最容易的文件是這樣的:

example1/datafile.dat

rectangle 10 10 150 50 2 blue

rectangle 7 7 153 53 2 blue

text 80 30 "Simple Drawing Tool" c red

The first two lines of this file represent the data for two blue, horizontally stretched rectangles with a line thickness of 3. The final line places a piece of red text, anchored at the center (hence the "c"), in the middle of the two rectangles.

文件的前兩行代表兩個藍色的水平展開的長方形,線條寬度是2(原文此處為3,可能是筆誤,譯者注).最后一行放了一段紅色的文字,定位在中心(由"c"來指定)----在兩個長方形的中間.

用文本文件保存你的數據使程序的調試更容易,因為你可以檢查程序輸出來保證一切都正常。同時也允許用戶手工修改保存的數據(這樣做可能好,也可能不好,取決于你的意圖).

當你讀取這種格式的文件時,或許得先對文件進行分析然后據此創建數據結構.分析文件時,你要一行一行地嘗試,使用象regexp這類的工具來分析文本不同的部分.下面是一個可能的過程:

example1/parser.tcl

canvas .c

pack .c

set fid [open "datafile.dat" r]

while { ![eof $fid] } {

# Read a line from the file and analyse it.

gets $fid line

if { [regexp

{^rectangle +([0-9]+) +([0-9]+) +([0-9]+) +([0-9]+) +([0-9]+) +(.*)$}

$line dummy x1 y1 x2 y2 thickness color] } {

.c create rectangle $x1 $y1 $x2 $y2 -width $thickness -outline $color

} elseif { [regexp

{^text +([0-9]+) +([0-9]+) +("[^"]*") +([^ ]+) +(.*)$}

$line dummy x y txt anchor color] } {

.c create text $x $y -text $txt -anchor $anchor -fill $color

} elseif { [regexp {^ *$} $line] } {

# Ignore blank lines

} else {

puts "error: unknown keyword."

}

}

close $fid

我們一次讀取一行數據,使用正則表達式查找該行代表的是某種數據類型.通過檢查第一個詞,我們可以區分代表長方形的數據和代表文本的數據,所以第一個詞是一個關鍵字,它明確地告訴我們正在處理的是什么類型的數據.同樣我們分析每個項目的坐標,顏色和其他屬性.括號中正則表達式的分組部分使我們找到變量'x1','x2'等的分析后的結果.

假如你知道正則表達式如何工作,這看上去是一個很簡單的實現.但我覺得它有點難以維護,正則表達式也使其難以理解.

還有一個更簡捷的解決方法,叫做“active file(主動文件)”.原本由Nat Pryce在設計樣本時想到的。這種方法基于一個非常簡單的提議:與其用TCL自己來寫語法分析器(用regexp或其他途徑),干嘛不讓TCL的語法分析器為你做這些工作呢?

▲主動文件設計樣本

為解釋這種設計樣本,我們繼續使用上節中那個簡單的繪圖工具。首先我們用TCL語言寫兩個過程,一個畫矩形,一個寫文本。

example2/parser.tcl

canvas .c

pack .c

proc d_rect {x1 y1 x2 y2 thickness color} {

.c create rectangle $x1 $y1 $x2 $y2 -width $thickness -outline $color

}

proc d_text {x y text anchor color} {

.c create text $x $y -text $text -anchor $anchor -fill $color

}

現在要在畫布上繪圖,我們調用這兩個過程就行了,每次調用其中的一項。比如要畫如前所述的圖形,需要下面三個調用。

example2/datafile.dat

d_rect 10 10 150 50 2 blue

d_rect 7 7 153 53 2 blue

d_text 80 30 "Simple Drawing Tool" c red

看上去眼熟嗎?調用過程的代碼看上去與先前我們分析的代碼幾乎完全一樣。唯一的不同之處是關鍵詞由"rectangle"和"text"變成了"d_rect"和"d_text".

現在我們看到了寫樣本的技巧:為分析數據文件,我們要把它當作一個TCL腳本來對待。我們只把對我們寫好的過程的調用放到一個文件中,并用此文件作為數據文件.設計樣本的核心是數據文件實際上包含著對TCL過程的調用.

分析數據文件現在太容易了:

source "datafile.dat"

內建的TCL命令source讀取文件,分析并執行文件中的命令.因為我們已經完成了d_rect和d_text過程,source命令將自動以正確的參數調用這兩個過程.我們將d_rect和d_text稱為分析過程.

我們無需再做任何分析,不用正則表達式,不用一行一行地循環,不用打開/關閉文件.只需調用source命令就完成了所有的工作。

數據文件已經成了可以執行的TCL腳本.因為它包含的是可執行命令,而不僅僅是被動的數據,所以稱之為主動文件.主動文件在大多數腳本語言環境中均可正常運行,在Nat Pryce的主頁上對其有詳細的描述.

▲使用主動文件樣本的優點:

無需再寫一個分析程序,source調用TCL分析程序即可完成.

容易讀取數據文件格式.

使用主動文件樣本的缺點:

如果數據文件包含有危險命令,象l -a exec rm *,它們執行后會帶來嚴重的后果.解決這個問題的辦法是在安全模式下執行主動文件,防止危險命令。具體信息可參看TCL手冊中"安全解釋器"部分.

▲主動文件樣本的局限

此樣本不是對所有可能的數據格式都有效.數據格式必須是以行為基礎的,每一行必須以一個關鍵字開頭.用關鍵字開頭寫TCL過程,就把被動的關鍵字變成了主動的命令。這也意味著你不能使用象if或while之類的關鍵字,因為TCL不允許你用這樣的名字來寫過程.事實上,上面的例子中我把關鍵字改為d_text,就是因為開發工具包已經有了保留字text,該命令用來創建文本工具.

▲英語言過程

至此我們已經可以寫一個簡單的文件格式了:

d_rect 10 10 150 50 2 blue

d_rect 7 7 153 53 2 blue

d_text 80 30 "Simple Drawing Tool" c red

我們還有一個很簡單的分析程序,就是兩個分析過程和source命令.現在,我們看一下如何來進一步改進.

當你觀察大量此類數據時,極易被數據搞糊涂.第一行包含10 10 110 50 3,你得有些這方面的經驗才能很快明白前兩個代表一個坐標,后兩個是另一個坐標,最后一個是線寬.我們能用在數據中引入附加文本的方法來使一個程序員在閱讀時較為容易.

example3/datafile.dat

d_rect from 10 10 to 150 50 thick 2 clr blue

d_rect from 7 7 to 153 53 thick 2 clr blue

d_text at 80 30 "Simple Drawing Tool" anchor c clr red

介詞to和from,參數名thick和color使數據看上去更象英語句子了,為適應這些介詞,我們的分析過程需要其他的附加參數:

example3/parser.tcl

proc d_rect {from x1 y1 to x2 y2 thick thickness clr color} {

.c create rectangle $x1 $y1 $x2 $y2 -width $thickness -outline $color

}

正如你所看到的,執行過程并未改變.新參數在過程體中并未使用;其目的僅僅是為了使用數據可讀性更強.

▲選項/數值對

Tk工具包提供了一個創建圖形界面部件的集合.這些部件以選項和他們的值來加以配置,配置的語法很簡單(一個橫線,后跟選項名,再后面是其值)而且標準化(許多其他的TCL擴展集使用相同的語法來配置其部件).

使用選項/數值對后,數據文件看上去象這樣:

example4/datafile.dat

d_rect -x1 10 -y1 10 -x2 150 -y2 50 -thickness 2

d_rect -thickness 2 -x1 7 -y1 7 -x2 153 -y2 53

d_text -x 80 -y 30 -text "Simple Drawing Tool" -anchor c -color red

為分析數據,我們需要在分析過程d_rect和d_text中引入選項/數值對,我們首先試一下使用與英語過程相似的啞變量.

proc d_rect {opt1 x1 opt2 y1 opt3 x2 opt4 y2 opt5 thickness opt6 color} {

.c create rectangle $x1 $y1 $x2 $y2 -width $thickness -outline $color

}

我們再一次看到,實現的過程并未改變.盡管這個解決方案只對最簡單的數據格式有效,但它很清晰明了.它的優點有兩個:選項在參數列表中的位置是固定的.比如,你不能把color(顏色屬性)放在thickness(線寬屬性)前面.對一個純數據文件格式來說這個方法還不錯(因為數值往往按相同的順序存儲),但當你想將其用于腳本中的手工輸入數據時,這個方法則成了一個障礙.

選項沒有默認值:你必須提供所有選項的值,而不能遺漏其中任何一個.

下面是一個可解決所有問題的實現過程.

example4/parser.tcl

proc d_rect {args} {

# First, specify some defaults

set a(-thickness) 1

set a(-color) blue

# Then, 'parse' the user-supplied options and values

array set a $args

# Create the rectangle

.c create rectangle $a(-x1) $a(-y1) $a(-x2) $a(-y2)

-width $a(-thickness) -outline $a(-color)

}

與使用一個長長的參數表不同,分析過程現在僅有一個名為args的參數,由它來收集調用過程時所有的實際參數.參數x1,y1等消失了.他們現在由一個局部的數組來處理,稍后我們將圓心解釋.

代碼的第一部分為選項設定默認值,第二部分分析args中的選項/數值對.TCL內建的數組處理模塊對此做得非常得心映手.它先在數組a中創建新的入口,使用選項名(包括前導橫線"-")作為索引,選項值作為數組值.

如果用戶在調用中不指定-color選項,a(-color)的入口默認值保持不變. 除用數組入口代替過程參數外,過程體中的最后一行與前面的實現一樣.

如果用戶調用時忘記指定選項-x1,則-x1的數組入口不會被設置(沒有其默認值),創建矩形的調用就會引發一個錯誤.此例說明你可以給其中一些選項指定默認值,使其可隨意選擇,而另一些則不指定默認值,強制其必須由用戶指定.

▲最好的格式通常是各種方法的結合

現在我們已經明白了TCL數據文件的常見方法(主動文件,英語言過程,選項/數值對),我們可以將其各自的優點組合進一個單獨的數據格式中去.對強制性選項,我們使用固定位置參數時,多半與啞介詞相結合增強可讀性(見英語言過程).而所有的可隨意選擇的選項,宜用選項/數值對機制來進行處理,好讓用戶可以空著選項或在調用時改變其位置.最后,數據文件可能會是這樣的:

d_rect from 10 10 to 150 50 -thickness 2

d_rect from 7 7 to 153 53 -thickness 2

d_text at 60 30 "Simple Drawing Tool" -anchor c -color red

假定所有項目的color屬性的默認值都是"blue".

作為一個個人習慣,我通常會寫這樣的命令:

d_rect

from 10 10

to 150 50

-thickness 2

d_rect

from 7 7

to 153 53

-thickness 2

d_text

at 80 30 "Simple Drawing Tool"

-anchor c

-color red

I find it slightly more readable, but that's all a matter of personal taste (or in my case lack of taste :-).

我覺得可讀性要好一些,但這僅是一個個人偏好的問題.(or in my case lack of taste)(這句話是作者在調侃自己,但我不知如何把它譯出來,請哪位大俠幫忙指點一下,譯者注)

--------------------------------------------------------------------------------

▲更多復雜的數據

至今為止,我們已經對一個非常簡單的包含矩形與文本的例子進行了研究.這種數據格式用主動文件設計樣本非常容易讀取并加以分析.

現在我們來看一個更為復雜的數據格式,來解釋一下使用主動文件的更加"高級"的技巧.這將使你在使用TCL數據文件格式方面成為一個專家.

▲數據倉庫工具

我過去經常收集設計樣本,組成了一個樣本庫,每個都有一個簡短的說明和一些屬性.我還把在其中找到樣本的書的名字,作者和ISBN號記下來,作為以后查找時的參考.為了記錄所有這些信息,我用TCL寫了一個數據倉庫工具.其主要功能是把樣本按照類別和級別進行分類,指出全書中每一個樣本和講述它的頁碼.

此工具的輸入是與此相似的一個文件:

#首先,我介紹一些你從中可以找到好的設計樣本的書和設計程序時的習慣寫法.每一本書,

#每一個網址,或是其他的樣本資源都用關鍵字"source"指定,后跟一個唯一的標簽及其他附

#加信息

Source GOF {

Design patterns

Elements of reusable object-oriented software

Gamm, Helm, Johnson, Vlissides

Addison-Wesley, 1995

0 201 63361 2

}

Source SYST {

A system of patterns

Pattern-oriented software architecture

Buschmann, Meunier, Rohnert, Sommerlad, Stal

Wiley, 1996

0 471 95869 7

}

#下一步,我介紹一些類別,為了更容易找到樣本,我想把樣本進行分組.每個類別都

#有一個名稱(如"存取控制")和一個簡短的說明.

Category "Access control" {

How to let one object control the access to one or more

other objects.

}

Category "Distributed systems" {

Distributing computation over multiple processes, managing

communication between them.

}

Category "Resource handling" {

Preventing memory leaks, managing resources.

}

Category "Structural decomposition" {

To break monoliths down into indpendent components.

}

#最后,我介紹了樣本本身,每一個都有一個名字,屬于一個或多個類別,出現在上述樣

#本資源列表的一處或多處.每個樣本都有級別,可能是"arch"(對于結構型樣本),

#"design"代表較小規模的設計樣本,"idiom"代表語言指定型樣本.

Pattern "Broker" {

Categories {"Distributed systems"}

Level arch

Sources {SYST:99}?? ; # 這表示此樣本在標記為"SYST"的書中

# 第99頁加以講述.

Info {

Remote service invocations.

}

}

Pattern "Proxy" {

# This pattern fits in two categories:

Categories {"Access control" "Structural decomposition::object"}

Level design

# Both these books talk about the Proxy pattern:

Sources {SYST:263 GOF:207}

Info {

Communicate with a representative rather than with the

actual object.

}

}

Pattern "Facade" {

Categories {"Access control" "Structural decomposition::object"}

Sources {GOF:185}

Level design

Info {

Group sub-interfaces into a single interface.

}

}

Pattern "Counted Pointer" {

Categories {"Resource handling"}

Level idiom

Sources {SYST:353}

Info {

Reference counting prevents memory leaks.

}

}

這僅是我最初編寫的輸入文件的一部分,但它還是包含了足夠的數據來作為一個較好的例子.樣本的說明很短,還有些笨拙,但對這個例子來說已經夠了.

正如你看到的,這個數據文件幾個新的特點:

▲數據被包含在一些結構中,用大括號{}加以分組.每個結構都由一個關鍵字開頭.

這些結構可以嵌套,如:結構"Pattern"可以包含一個"Info"結構.

▲結構中的元素可以采用很多形式。它們中的一些是標志符或字符串(比如元素"Level"),其他的看上去象是特殊的代碼(如SYST:353),還有一些甚至是自由格式的文本(如在結構Category和Info中的那樣).

▲每個結構中的元素的排列順序是任意的.觀察一下最后兩個樣本就會發現Level和Sources兩個元素的順序可以互換.所有元素實際上都可以按你想要的順序排列.

▲數據文件包含有TCL注釋語句,他們不僅可以在結構之間出現,甚至可以出現在結構內部.注釋語句能讓你的數據更易理解.

你可能會想這種格式比前面的例子復雜太多了,用TCL語言為其寫一個分析器幾乎是不可能的.可能看上去不太明了,我們還可以用主動文件樣本來使此工作更加簡單.分析(解析)過程比前面的更細而已,但肯定不是"復雜".

下面是我的分析如上數據文件的工具:

#我們把數據保存在以下三個列表內:

set l_patterns [list]

set l_sources [list]

set l_categories [list]

#我們還需要一個變量跟蹤我們當前所在的Pattern結構

set curPattern ""

# 下面是關鍵字"Source"的分析過程.

# 正如你所看到的,關鍵字后面跟有一個id號(是source的唯一標志符),

#還有source的說明文本.

proc Source {id info} {

# Remember that we saw this source.

global l_sources

lappend l_sources $curSource

# Remember the info of this source in a global array.

global a_sources

set a_sources($curSource,info) $info

}

# The parsing proc for the 'Category' keyword is similar.

proc Category {id info} {

global l_categories

lappend l_categories $curCategory

global a_categories

set a_categories($curCategory,info) $info

}

# This is the parsing proc for the 'Pattern' keyword.

# Since a 'Pattern' structure can contain sub-structures,

# we use 'uplevel' to recursively handle those.

proc Pattern {name args} {

global curPattern

set curPattern $name?? ; # This will be used in the sub-structures

# which are parsed next

global l_patterns

lappend l_patterns $curPattern

# We treat the final argument as a piece of TCL code.

# We execute that code in the caller's scope, to parse the elements

# of the structure.

# 'uplevel' will call 'Categories', 'Level' and other commands that

# handle the sub-structures.

# This is similar to how we use the 'source' command to parse the entire

# data file.

uplevel 1 [lindex $args end]

set curPattern ""

}

# The parsing proc for one of the sub-structures.? It is called

# by 'uplevel' when the 'Pattern' keyword is handled.

proc Categories {categoryList} {

global curPattern?? ; # We access the global variable 'curPattern'

# to find out inside which structure we are.

global a_patterns

set a_patterns($curPattern,categories) $categoryList

}

# The following parsing procs are for the other sub-structures

# of the Pattern structure.

proc Level {level} {

global curPattern

global a_patterns

set a_patterns($curPattern,level) $level

}

proc Sources {sourceList} {

global curPattern

global a_patterns

# We store the codes such as 'SYST:99' in a global array.

# My implementation uses regular expressions to extract the source tag

# and the page number from such a code (not shown here).

set a_patterns($curPattern,sources) $sourceList

}

proc Info {info} {

global curPattern

global a_patterns

set a_patterns($curPattern,info) $info

}

猛一看,這個程序比我們在相對簡單的繪圖例子所做的要多很多.但考慮到這個方法的功能,只用幾個分析過程并靈活運用命令"uplevel",我們同樣可以分析包含有復雜結構,注釋,嵌套子結構和自由格式文本數據的數據文件.設想一下如果我們從頭寫這樣一個分析器會有多難.

數據由Source,Pattern或Info等過程進行解析.解析后的數據在內部存儲在三個列表和三個數組中.數據的嵌套由調用uplevel來進行處理,用變量curPattern來記住我們當前所在的位置.

要注意的是這種方法需要你的數據能夠理解TCL語法.這意味著大括號應該放在一行的最后,而不是下一行的開頭.

▲遞歸結構

在倉庫的樣例中,Pattern類型的結構包含有其他類型的子結構如Info和Sources.那么當一個結構包含有相同類型的子結構時會如何呢?換句話說,我們如何處理遞歸結構?

例如,你要描述一個面向對象系統的設計,該設計由遞歸子系統實現.

example6/datafile.dat

# Description of an object-oriented video game

System VideoGame {

System Maze {

System Walls {

Object WallGenerator

Object TextureMapper

}

System Monsters {

Object FightingEngine

Object MonsterManipulator

}

}

System Scores {

Object ScoreKeeper

}

}

為跟蹤我們當前處于哪一個System系統結構中,看上去我們需要不只一個全局變量currPattern.在分析的任何時刻,我們都可能處在很多嵌套的System結構中,因此我們需要兩個以上的變量.我們可能需要某種堆棧,在遇到System過程時壓入一個值,在過程的結束時再彈出來.我們用一個TCL列表可以構造這樣一個棧.

但若你不想維護一個棧的話,也可以不用它.這種方法也是基于一個非常簡單的建議:當你需要使用一個棧時,看一下能否使用函數調用棧.處理遞歸數據時,我通常就用這個方法來實現我的分析過程的.

example6/parser.tcl

set currSystem ""

proc System {name args} {

# Instead of pushing the new system on the 'stack' of current systems,

# we remember it in a local variable, which ends up on TCL's

# function call stack.

global currSystem

set tmpSystem $currSystem

set currSystem $name?? ; # Thanks to this, all sub-structures called by

# 'uplevel' will know what the name of their

# immediate parent System is

# Store the system in an internal data structure

# (details not shown here)

puts "Storing system $currSystem"

# Execute the parsing procedures for the sub-systems

uplevel 1 [lindex $args end]

# Pop the system off the 'stack' again.

set currSystem $tmpSystem

}

proc Object {name} {

global currSystem

# Store the object in the internal data structure of the current

# system (details not shown here)

puts "System $currSystem contains object $name"

}

source "datafile.dat"

與把嵌套的系統名存儲在一個棧中(該棧由TCL的列表或數組來模擬)不同,我們只把對象名存儲在一個名為tmpSystem的局部變量中.由于解析過程會由TCL依據棧中的順序自動調用,我們無需再去顯式地壓入/彈出任何數據了.

▲其他例子

由Don Libes 寫的CGI庫使用主動文件樣本來表達HTML文檔.這個想法是寫一個TCL腳本作為HTML文檔并為你生成純正的HTML文件.該文檔包含有核心列表,格式化文本和其他的HTML元素.分析過程調用uplevel處理遞歸子結構.

下面是Don的代碼的一部分,告訴你他是如何應用本文所講述的技巧的.

# Output preformatted text.? This text must be surrounded by '' tags.

# Since it can recursively contain other tags such as '' or hyperlinks,

# the procedure uses 'uplevel' on its final argument.

proc cgi_preformatted {args} {

cgi_put "????? cgi_close_proc_push "cgi_puts"

if {[llength $args]} {

cgi_put "[cgi_lrange $args 0 [expr [llength $args]-2]]"

}

cgi_puts ">"

uplevel 1 [lindex $args end]

cgi_close_proc

}

# Output a single list bullet.

proc cgi_li {args} {

cgi_put

if {[llength $args] > 1} {

cgi_put "[cgi_lrange $args 0 [expr [llength $args]-2]]"

}

cgi_puts ">[lindex $args end]"

}

# Output a bullet list.? It contains list bullets, represented

# by calls to 'cgi_li' above.? Those calls are executed thanks

# to 'uplevel'.

proc cgi_bullet_list {args} {

cgi_put "????? cgi_close_proc_push "cgi_puts "

if {[llength $args] > 1} {

cgi_put "[cgi_lrange $args 0 [expr [llength $args]-2]]"

}

cgi_puts ">"

uplevel 1 [lindex $args end]

cgi_close_proc

}

我不想對這個龐大的庫的細節進行詳細的解釋,你可以自己從Don的主頁上下載后看一下.

--------------------------------------------------------------------------------

作為另一個例子,我的TODL工具使用類和方法等解析過程對面向對象的設計加以分析.下面是我的工具中一個輸入文件的例子:

# Todl schema for module 'shapes'.? It describes classes for some

# geometrical shapes such as rectangles and squares.

odl_module shapes {

#######

# Classes

# Base class for all shapes.

class shape {} {

attr id 0?? ; # Attribute 'id' is inherited by all shapes

# and has default value 0.

}

# Rectangle with a width and height.

# Inherits from 'shape'.

class rect {shape} {

attr w 10

attr h 10

# Some methods to calculate properties for the shape,

# and to draw it on the screen.

method "" perimeter {}

method "" area {}

method "" draw { x {y 0} }

}

class square {shape} {

... (details similar to 'rect')

}

#######

# Module parameters

# All classes automatically get a 'print' method.

param all { print }

# Name of the 'delete' proc.

param delete_name delete

# We want debugging output:

param debug 1

}

查看本文件后,你能指出全部分析過程的列表嗎?

--------------------------------------------------------------------------------

我曾經為C++的類實現寫過一個(非常)簡單的解析器.因為太懶,所以我用TCL語言來寫.事實證明它過于復雜以致沒有一點用處,但它說明了主動文件樣本的強大功能.下面看一下這個包含有復雜的C++的數據文件:

class myListElt: public CListElt, private FString {

This is a documentation string for the class 'myListElt'.

You can see multiple inheritance here.

} {

public:

method int GetLength(void) {

This is a documentation string

Returns the total length of the FString.

} {

// This is the final argument of the 'method' parsing proc.

// It contains freeform text, so this is where I can write

// pure C++ code, including the comment you are now reading.

return myLength;

}

method char* GetString(void) {

Returns the complete FString.

} {

append(0);

return (char*)data;

}

private:

method virtual void privateMethod(short int p1, short int p2) {

Note that just saying "short" is not enough:

you have to say "short int".

} {

printf("Boo!? p1=%d, p2=%d

", p1, p2);

}

}

data short int b {This is just a counter}

data void* somePointer {to store the end-of-list or something like that}

method void error(short int errNo, char* message) {

This is a global library procedure, which

reports an error message.

} {

cout << "Hey, there was an error (" << errNo << ") " << message << endl;

}

cpp_report

這個例子可能有些牽強,但它顯示了主動文件樣本的強大功能.你看到的是TCL代碼,但它看上去象是C++代碼,它能自動產生文檔,類圖,編程參考,當然還有可編譯的C++代碼.

解析過程如方法和類把C++實現存儲在內部的TCL數據結構中,最后,調用cpp_report產生最終的C++代碼.

下面的來自分析器的程序片段說明你可以使TCL分析器去讀取與C++語法類似的文件.

# Parsing proc for 'class' keyword.

# Arguments:

# - class name

# - list of inheritance specifications, optional

# - comment block

# - body block

proc class {args} {

global _cpp

# split names from signs like : , *

set cargs [expand [lrange $args 0 [expr [llength $args] - 3]]]

# -3 to avoid the comment block and the class body.

# First process the name

set className [lindex $cargs 0]

if { $_cpp(CL) == "" } {

set _cpp(CL) $className?? ; # This is like 'currPattern' in the

# pattern repository example

} else {

error "Class definition for $className: we are already inside class $_cpp(CL)"

}

# Then process the inheritance arguments.

# Obvisouly, this is already a lot more complicated than in the

# previous examples.

set inhr [list]

set mode beforeColon

set restArgs [lrange $cargs 1 end]

foreach arg $restArgs {

if { $arg == ":" } {

if { $mode != "beforeColon" } {

error "Misplaced ":" in declaration "class $className $restArgs""

}

set mode afterColon

} elseif { $arg == "public" || $arg == "private" } {

if { $mode != "afterColon" } {

error "Misplaced "$arg" in declaration "class $className $restArgs""

}

set mode $arg

} elseif { $arg == "," } {

if { $mode != "afterInherit" } {

error "Misplaced "," in declaration "class $className $restArgs""

}

set mode afterColon

} else {

if { $mode != "public" &&? $mode != "private" } {

error "Misplaced "$arg" in declaration "class $className $restArgs""

}

if { ![IsID $arg] } {

warning "$arg is not a valid C++ identifier..."

}

lappend inhr [list $mode $arg]

set mode afterInherit

}

}

if { $mode != "afterInherit"? &&? $mode != "beforeColon" } {

error "Missing something at end of declaration "class $className $restArgs""

}

set _cpp(CLih) $inhr

set _cpp(CLac) "private"

# First execute the comment block

uplevel 1 [list syn_cpp_docClass [lindex $args [expr [llength $args] - 2]]]

# Then execute the body

uplevel 1 [list syn_cpp_bodyClass [lindex $args end]]

set _cpp(CL) ""

set _cpp(CLac) ""

set _cpp(CLih) ""

}

--------------------------------------------------------------------------------

關于懶惰

按Larry Wall的話,一個好的程序員的最重要的潛質就是懶惰.也就是說,有創造性的懶惰.本文提到了兩個建議,他們能夠歸于一件事:懶惰.

當你需要一個解析器時,使用一個現成的解析器,修改你的文件格式去造就分析器的要求(當然,需要你已經達到了能夠自由選擇文件格式的境界)

當你需要使用堆棧時,你可以使用現成的函數調用堆棧,忘掉壓入,彈出和其他的操作.

"重用"并不僅表示封裝和信息的隱藏.有些時候它只不過表示懶惰罷了.

--------------------------------------------------------------------------------

總結

以上是生活随笔為你收集整理的tcl把文本产生html,TCL脚本数据文件格式(译文)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

久久久久福利视频 | 四虎在线免费观看 | 久久精品99久久 | 日日噜噜噜噜夜夜爽亚洲精品 | 91精品国产综合久久久久久久 | 色就是色综合 | 亚洲精品在线观看视频 | 国产超碰在线观看 | 黄色大全免费观看 | 日本护士三级少妇三级999 | 国产视频一区在线播放 | 国产小视频免费观看 | 亚洲女人av| 亚洲精品小视频在线观看 | 日韩字幕 | 97偷拍视频 | 97成人在线| 国产高清久久久久 | 亚洲午夜剧场 | 国产国产人免费人成免费视频 | 日本99干网 | 探花视频在线观看免费版 | 丁香5月婷婷 | 久久一线 | 久久婷婷一区二区三区 | 欧美动漫一区二区三区 | 97色综合 | 天天爽天天做 | 很黄很黄的网站免费的 | 久久人人添人人爽添人人88v | 亚洲国产人午在线一二区 | 激情欧美xxxx | 亚州人成在线播放 | 久久国产精品视频免费看 | 国产在线一线 | 视频一区二区三区视频 | 成 人 黄 色 免费播放 | 最近最新最好看中文视频 | 九九久久国产 | 91久久奴性调教 | 五月激情五月激情 | 亚洲成av人影片在线观看 | 在线观看91精品国产网站 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 911国产 | 99久久免费看 | 97超碰网| 久久精彩视频 | 国产精品第72页 | 中文字幕丝袜一区二区 | 黄色小说免费观看 | 国产精品二区在线观看 | 国产专区视频在线观看 | 狠狠ri| 婷婷激情五月综合 | 中文字幕一区二区在线观看 | 精品日韩视频 | 日韩欧美在线一区 | 91最新地址永久入口 | 一级α片| 小草av在线播放 | 久久神马影院 | 天天射天天射 | 在线观看视频免费大全 | 国产麻豆精品一区二区 | 国产精品亚洲a | 在线视频 91 | 伊人丁香| 精品国产乱码久久久久久1区2匹 | 香蕉久久久久久久 | 久久精品超碰 | 亚洲一区视频在线播放 | 色视频在线免费观看 | 中文字幕在线观看第二页 | 黄色在线视频网址 | 成人在线黄色电影 | 久久一本综合 | 国产在线视频一区 | 日韩av中文字幕在线免费观看 | 91日韩国产| 亚洲国产片色 | 天天射天天做 | 国产精品久久中文字幕 | www.亚洲激情.com | 一区二区三区中文字幕在线观看 | 中文字幕一区二区三区精华液 | 日韩免费视频播放 | 成人黄色免费在线观看 | 91av视频在线观看免费 | 人人爱人人添 | 999久久国精品免费观看网站 | 午夜精品电影一区二区在线 | 亚洲黄色免费观看 | 中文字幕视频免费观看 | 香蕉网在线播放 | 91传媒激情理伦片 | 久久精品久久精品久久39 | 91精品一区二区在线观看 | 超级碰碰碰视频 | 久草在线这里只有精品 | 亚洲理论电影 | 2019天天干天天色 | 亚洲一级在线观看 | 日韩狠狠操 | 欧美日韩二区在线 | 黄色综合| 国产区精品区 | 91秒拍国产福利一区 | 欧美精品在线免费 | 国产一级片视频 | 欧美永久视频 | 日韩va欧美va亚洲va久久 | 91av原创| 日本久久片 | 97超碰伊人 | 日韩电影黄色 | 婷婷色六月天 | www.天天草 | 91黄色免费看 | 成人在线视频论坛 | 日日弄天天弄美女bbbb | 天天射天天操天天 | 狠狠操狠狠干天天操 | 国产精品久久久久久久久久妇女 | 美女黄网站视频免费 | 国产精品手机看片 | 在线免费看黄色 | 亚洲视频www | 99亚洲精品| 日黄网站| 97免费视频在线 | 97免费在线观看视频 | 九热精品 | 成年人在线免费看视频 | 天天舔夜夜操 | 在线成人一区二区 | 午夜手机电影 | 中文字幕一区二区三区久久 | 色天天中文 | 九九视频网 | www.夜夜 | 亚洲情感电影大片 | 国产精品热视频 | 激情片av| 国产专区日韩专区 | 五月花激情 | 精品亚洲午夜久久久久91 | 成人毛片一区二区三区 | 日韩高清在线看 | 一区二区三区 亚洲 | 婷婷丁香色 | 日日碰狠狠躁久久躁综合网 | 国产精国产精品 | 五月婷婷操 | 成人中文字幕+乱码+中文字幕 | 中文字幕二区三区 | 91精品日韩 | 激情婷婷| 曰本免费av | 93久久精品日日躁夜夜躁欧美 | 国产精品久久久久久久久久久久午 | 成年人免费观看国产 | 婷婷六月丁 | 免费看黄在线 | 美女黄频网站 | 中文字幕在线有码 | 国产精品18久久久久久久网站 | 日韩av在线小说 | av丝袜在线| 天天操天天色综合 | 色资源网在线观看 | 欧美国产不卡 | 黄色美女免费网站 | 久久九九国产精品 | 亚洲精品国产拍在线 | 亚洲精品tv久久久久久久久久 | 欧美日韩午夜 | 久久激情视频 久久 | 亚洲精品免费在线播放 | 日韩av成人在线 | 精品久久五月天 | 国产h在线观看 | 超碰人人做 | 91精品国产91久久久久福利 | 在线观看av免费观看 | 国产一二区免费视频 | 日韩成人精品一区二区 | 国产精久久久 | 99r在线视频 | 国产日本亚洲高清 | 在线观看免费成人 | 国产91精品久久久久久 | 色综合久久久久久久久五月 | 色综合人人 | 久久不色 | 麻豆精品传媒视频 | 午夜少妇av| 免费看黄的视频 | 玖玖精品在线 | 欧美性脚交 | 久久免费久久 | 插久久| 超碰97免费在线 | 久99久精品视频免费观看 | 91黄色视屏 | 激情五月综合 | 中文字幕视频在线播放 | 天天做天天干 | 六月丁香激情综合 | 国产免费久久精品 | 久久精品精品电影网 | 欧美国产不卡 | 在线视频99 | 亚洲春色成人 | 国产打女人屁股调教97 | 日韩中文字幕免费 | 久久国产精品99久久久久久进口 | 久久久久女教师免费一区 | 69av在线视频 | 中文亚洲欧美日韩 | 色爽网站 | 精品亚洲va在线va天堂资源站 | 91久久国产综合精品女同国语 | 日日夜夜国产 | 国产亚洲视频在线 | 中文字幕免费高清av | 久久精品香蕉视频 | 亚洲va欧美| 深爱婷婷激情 | av黄免费看 | 久久系列 | 18性欧美xxxⅹ性满足 | 亚洲黄色免费网站 | 久久久网| 精品在线免费观看 | 91免费看黄 | 99riav1国产精品视频 | 麻豆精品国产传媒 | 亚洲一区二区高潮无套美女 | 欧美亚洲国产一卡 | 五月婷婷伊人网 | 国产成人一区二区精品非洲 | 国产无套精品久久久久久 | 成人在线视频在线观看 | 99久e精品热线免费 99国产精品久久久久久久久久 | 激情小说 五月 | 人人射人人澡 | 国产精品99久久久久久久久久久久 | 日韩精品高清不卡 | 五月婷婷一区二区三区 | 在线观看免费一区 | 欧美日比视频 | 天天操天天干天天 | wwwwwww黄| 久久综合精品一区 | 99久久夜色精品国产亚洲 | 免费看搞黄视频网站 | 国产黄免费看 | 在线电影 你懂得 | 黄色a大片 | 久久精品欧美 | 国产精品视频在线看 | 在线黄色免费av | 天天天在线综合网 | 欧美国产日韩在线观看 | 91探花国产综合在线精品 | 日韩激情免费视频 | 亚洲综合视频网 | 国产在线观看xxx | 欧美激情xxxx性bbbb | 欧美伦理一区 | 色av资源网 | 天天干天天玩天天操 | 日韩高清免费在线 | 激情综合网五月婷婷 | 国产精品国产毛片 | 99久久精品免费视频 | 天天爽人人爽夜夜爽 | 99久久精品免费看国产免费软件 | 91视频高清 | 天天插日日射 | 97小视频 | 日韩av男人的天堂 | 91色国产| 麻豆国产网站入口 | 国产视频999| 激情五月视频 | 免费看的黄网站软件 | 一级理论片在线观看 | 天堂av网址 | 黄色一级免费电影 | 免费在线观看av不卡 | 午夜精品久久久久久久99无限制 | 中文字幕在线观看视频免费 | 久艹在线观看视频 | 综合久久久久久 | 久久国产香蕉视频 | 中文国产在线观看 | 婷婷激情五月综合 | 欧美激情视频在线免费观看 | 久操视频在线免费看 | 久久一区二区三区四区 | 97看片吧 | 久久久久久蜜av免费网站 | 成人av在线电影 | 欧美三级高清 | 韩国一区二区三区视频 | 狠狠色免费 | av福利电影| 日批网站在线观看 | 亚洲激情综合 | 精品成人a区在线观看 | 国产精品热视频 | 午夜精品成人一区二区三区 | 色综合天天在线 | 在线导航福利 | 六月激情丁香 | 国产精品a成v人在线播放 | www.看片网站 | 中文字幕免费中文 | 亚洲www天堂com | 欧美极品xxx | 狠狠色丁香久久婷婷综合_中 | 久久久穴 | 天天操天天干天天摸 | 色.com| 操操操影院 | 99精品免费在线 | 国内精品一区二区 | 精品亚洲网 | 色资源网在线观看 | 欧美少妇影院 | 日韩一级电影网站 | 激情欧美在线观看 | 欧美激情奇米色 | 日本中文字幕在线看 | 国产欧美高清 | 成人一区二区三区在线观看 | 麻豆系列在线观看 | 黄色免费视频在线观看 | 激情校园亚洲 | 亚洲精品国产自产拍在线观看 | 九九热免费精品视频 | 日韩和的一区二在线 | 成人免费观看网站 | 国产精品久久久一区二区 | 欧美成人区 | 丁香在线视频 | 日韩成人精品一区二区 | 国产成人久久av免费高清密臂 | 国产 日韩 欧美 中文 在线播放 | 天天激情在线 | 午夜精品区 | 国产精品理论片在线观看 | 91黄色在线观看 | 黄色大片免费网站 | 99爱在线 | 99性视频| 久久久99精品免费观看 | 51久久成人国产精品麻豆 | 四虎成人av | 91av超碰| 91pony九色丨交换 | 欧美在线aa| 激情五月看片 | 亚洲国产精品成人av | 国产成人精品av在线观 | 欧美精品中文 | 国产精品黄色影片导航在线观看 | 99精品视频一区二区 | 日本黄色大片免费 | 欧美日韩3p | 在线观看日韩一区 | 欧美在线视频一区二区三区 | 久久精品中文字幕免费mv | 激情视频网页 | 欧美激情综合色综合啪啪五月 | 久久好看免费视频 | 98久9在线 | 免费 | 欧美成人亚洲成人 | 在线一二三四区 | 久久久久女人精品毛片九一 | 欧美日比视频 | 国产在线观看不卡 | 国产午夜精品一区二区三区嫩草 | avsex| 免费观看成人av | www.天天射.com| 国产99色 | 亚州国产精品久久久 | 国产精品18久久久久久久久 | 国产一级淫片免费看 | 亚洲麻豆精品 | 国产色视频一区二区三区qq号 | 日韩在线不卡av | 婷婷丁香色综合狠狠色 | 18av在线视频| 欧美精品一区二区三区一线天视频 | 亚洲精品男人天堂 | 久久久综合香蕉尹人综合网 | 国产成人精品在线观看 | 国产97色| 狠狠伊人 | 最近日本字幕mv免费观看在线 | 国产第一页福利影院 | 国产精品一区二区三区久久久 | 成人国产一区 | 狠狠色综合网站久久久久久久 | 天天干夜夜擦 | 国产精品第7页 | 精品福利国产 | 最近2019年日本中文免费字幕 | 天天干一干 | 婷婷六月天天 | 伊人天天狠天天添日日拍 | 91在线91 | 韩日av一区二区 | 激情网站五月天 | 欧美精品一二三 | 日本久久免费电影 | 在线激情小视频 | 精品在线观看一区二区三区 | 中文字幕久久亚洲 | 国产精品久久久久永久免费 | 99精品一区 | 国产一区 在线播放 | 日韩伦理片一区二区三区 | 欧美淫aaa免费观看 日韩激情免费视频 | 午夜黄色一级片 | 久久久久久97三级 | 亚洲精品在线看 | 一区二区三区在线观看 | 亚洲最大激情中文字幕 | 亚洲午夜精品在线观看 | 亚洲欧美日本国产 | 中文字幕在线播放av | 久久av免费 | 国产日韩视频在线播放 | 久久不射电影院 | 亚洲精品国产精品国自产观看浪潮 | 国产在线综合视频 | 国产中文字幕在线播放 | 国产精品久久99综合免费观看尤物 | 免费视频久久久久 | 91免费黄视频 | 色在线免费 | 免费成人在线网站 | 婷婷网站天天婷婷网站 | 国产精品久久久久999 | 99精品国产成人一区二区 | 九色91在线视频 | 婷婷五天天在线视频 | 国产精品久久久久久久久久久杏吧 | 在线黄av | 国产精品尤物 | 国产明星视频三级a三级点| 日韩特黄av| 亚洲永久精品在线观看 | 在线观看精品黄av片免费 | 91麻豆免费版 | 天天色.com| 午夜丁香视频在线观看 | 免费十分钟 | 午夜视频免费播放 | 日韩中文字幕在线看 | 国产专区精品视频 | 日韩美女久久 | 在线欧美a| 国产剧情一区二区在线观看 | 成人日韩av | 97国产情侣爱久久免费观看 | 97av在线视频 | 午夜精品一区二区三区免费视频 | 一区二区三区影院 | 欧美一级爽| 午夜国产一区二区 | 国产成人久久av免费高清密臂 | 中文字幕精品一区二区三区电影 | 亚洲激情 欧美激情 | 国产高清第一页 | 亚洲a资源 | 午夜.dj高清免费观看视频 | 国产精品久久久久久久久久妇女 | 久久精品综合一区 | av中文字幕网址 | 国产网站av | 国产人成看黄久久久久久久久 | 欧美视屏一区二区 | 在线观看免费高清视频大全追剧 | 欧美乱熟臀69xxxxxx | 国际av在线 | 国产精品麻豆三级一区视频 | 精品91在线 | 中国一级片在线观看 | 午夜视频色 | 免费黄色网止 | 五月婷婷在线视频 | 一区二区三区四区五区在线视频 | 六月激情丁香 | 国产精品va在线观看入 | 91麻豆精品国产91久久久无需广告 | 一二三区视频在线 | 99久久日韩精品免费热麻豆美女 | 婷婷在线色 | 九九热99视频 | 精品在线二区 | 国产精品一区免费看8c0m | 999久久久久久久久6666 | 岛国一区在线 | 国产青青青 | 欧美视频日韩 | 91看片麻豆 | 国产一区二区三区在线免费观看 | 免费日韩 精品中文字幕视频在线 | 亚洲精品在线视频观看 | 亚洲成人资源网 | 超碰最新网址 | 色偷偷97 | 在线亚洲激情 | 国产尤物在线视频 | 欧美日韩国产在线观看 | 久久只精品99品免费久23小说 | 久久精品国产免费看久久精品 | 人人草在线视频 | 日日成人网 | 国产精品亚洲综合久久 | 日日干夜夜爱 | 视频一区二区三区视频 | 久久a v视频 | 手机看片福利 | 久草在线视频资源 | 伊人丁香| 亚洲综合色站 | 男女精品久久 | 人人爽人人香蕉 | 中文字幕av网站 | 在线观看的av网站 | 又色又爽又黄高潮的免费视频 | www.色综合.com | 久久99精品国产麻豆婷婷 | 亚洲天天在线日亚洲洲精 | 91视频久久久 | 国产精品久久久久久久久久ktv | 久影院 | 国产免费叼嘿网站免费 | 国产精品久久久久久久久久了 | 欧美一区二区在线看 | 久久精品一区二区 | 人人玩人人添人人 | 高清一区二区 | 欧美精品久 | 亚洲狠狠操 | 久黄色| 婷婷综合成人 | 日韩av电影网站在线观看 | 亚洲区二区 | 国产精久久 | 成人精品一区二区三区中文字幕 | www.在线观看视频 | 亚洲精品乱码久久久久v最新版 | 国产精品s色 | av视屏在线| 精品中文字幕视频 | 久久亚洲热 | 国产超碰在线 | 99久久精品视频免费 | 欧美成人手机版 | 亚洲va欧美va人人爽春色影视 | 性色xxxxhd | 婷婷五综合 | 五月婷婷深开心 | 91毛片视频 | 在线播放国产一区二区三区 | 黄色大片免费网站 | 久久久久久激情 | www,黄视频 | av成人动漫 | 久久久久久中文字幕 | 婷婷亚洲五月色综合 | 国产精品中文字幕在线 | 国产精品久久久久一区二区三区 | 亚洲电影在线看 | 欧美日韩中文另类 | 中文字幕免费在线看 | 在线观看第一页 | 国产精品免费久久久久久久久久中文 | 成人国产精品一区 | 黄色1级大片 | 好看的国产精品视频 | 欧美激情xxxx性bbbb | av三级在线看 | 国内精品久久久久久久影视简单 | 伊人五月在线 | 亚洲精品网站在线 | 91在线视频一区 | 免费观看十分钟 | 欧美黑人性爽 | 久久高清国产 | 天天操·夜夜操 | 国产成人精品久久二区二区 | 精品视频区 | 五月天国产 | 91福利视频在线 | 欧美在线视频日韩 | 色五丁香| 欧美在线观看小视频 | www.成人久久 | 999久久久免费精品国产 | 一级淫片a| 一区二区av | 欧美国产大片 | 精品婷婷| 国产成人三级一区二区在线观看一 | 91福利小视频| av在线电影免费观看 | 2021国产在线 | 国产精品永久在线 | 国产一级二级在线播放 | 欧美a视频在线观看 | 久久精品波多野结衣 | 国产精品一区二区美女视频免费看 | 久福利| 婷婷丁香激情网 | 玖玖视频网| 日韩精品亚洲专区在线观看 | 日本精油按摩3 | 亚洲精品国产精品国自产 | 久久爱影视i | 国产精品s色| 亚洲人成在线电影 | 久久精品视频在线 | 亚洲日本欧美在线 | 欧美在线free | 久久福利小视频 | 狠色狠色综合久久 | 成人91av| 日韩在线不卡av | av电影在线观看完整版一区二区 | 久久精品电影院 | av中文字幕亚洲 | 黄色1级大片 | 中文字幕av电影下载 | 成人网444ppp | 最近日本字幕mv免费观看在线 | 久久超碰免费 | 激情婷婷欧美 | 99综合影院在线 | 婷婷精品国产一区二区三区日韩 | 四虎在线视频 | 日本韩国中文字幕 | 日日夜夜狠狠干 | 香蕉视频在线免费 | 麻豆传媒视频在线免费观看 | 亚洲jizzjizz日本少妇 | 在线免费av观看 | 国产成人久久精品 | 午夜电影一区 | 天天干天天操天天干 | 国产在线观看免费观看 | 欧美日韩精品在线播放 | 国产伦理一区二区三区 | 二区在线播放 | 超碰国产97 | 成人午夜剧场在线观看 | 亚洲在线激情 | 亚洲精品乱码久久久久久蜜桃91 | 国产精品久久久网站 | 欧美激情第十页 | 91亚洲精品乱码久久久久久蜜桃 | www.夜夜操 | 懂色av懂色av粉嫩av分享吧 | 天天插天天| 91麻豆精品国产91久久久更新时间 | 午夜精品久久久久久久99热影院 | www.伊人色.com | 国产在线不卡视频 | 91精品视频一区 | 中文字幕在线观看一区二区 | а天堂中文最新一区二区三区 | 国产超碰在线观看 | 日韩欧美成 | 婷婷夜夜 | 亚洲精品视频在线播放 | 久久天天躁狠狠躁亚洲综合公司 | 久久99热精品这里久久精品 | 国产九九九精品视频 | 在线一级片 | 国产午夜在线观看视频 | 天天干视频在线 | 97在线免费视频观看 | 精品在线看 | av免费观看高清 | 天天干中文字幕 | 亚洲人成在线观看 | 国产黄色片久久 | 午夜精品99久久免费 | 久久九九国产视频 | 中文字幕高清 | 国产69精品久久app免费版 | 成年人免费看片 | 国产在线日韩 | 亚洲色图激情文学 | 国产成人一区三区 | 亚洲精品久久久久www | 日韩视频 一区 | 黄色毛片视频免费 | 91污污 | 国产精品完整版 | 香蕉视频久久 | 四虎国产| 精品视频在线播放 | 国产黄色视 | 免费看黄视频 | 色com| 香蕉视频在线视频 | 日韩精品五月天 | 丁香花中文字幕 | av 一区 二区 久久 | 国产亚洲久一区二区 | 超碰人人在线 | 精品一区二区电影 | 波多野结衣电影一区 | 成人精品在线 | 91九色国产 | 欧美日在线 | 在线观看视频福利 | www黄色av | 97超碰人人在线 | 日韩91在线 | 在线观看韩日电影免费 | 日日操天天射 | 久草免费在线视频 | 亚洲乱码精品久久久久 | 日韩v在线91成人自拍 | 久久综合九色综合97_ 久久久 | 久草视频在线资源 | 日韩99热| 久久精精品| 久久久噜噜噜久久久 | 中文字幕第一页在线视频 | 国产精品久久久久av | 亚洲国产播放 | 久久久久亚洲精品男人的天堂 | 精品毛片久久久久久 | 日日干 天天干 | 98福利在线| 精品美女久久久久 | 天堂av在线网站 | 久久av在线| 欧美精品一区二区在线观看 | 五月天高清欧美mv | 亚洲砖区区免费 | 丰满少妇久久久 | 91av在线免费观看 | 免费在线一区二区 | 久久综合综合久久综合 | 久久国产精品一区二区 | 欧美黄色高清 | 99久久国产免费,99久久国产免费大片 | 成人久久18免费网站麻豆 | 国产精品亚洲片在线播放 | 91视频久久久久 | 黄色成人av | 深夜福利视频一区二区 | 日韩在线播放欧美字幕 | 久久综合色天天久久综合图片 | 狠狠色狠狠色合久久伊人 | 在线国产能看的 | 探花视频免费观看高清视频 | 涩av在线| 狠狠色狠狠色综合日日92 | 五月天中文字幕mv在线 | 亚洲成人精品在线观看 | 国产精品美女免费看 | 激情中文在线 | 最近高清中文字幕 | 黄色在线观看免费 | 久久亚洲综合色 | 日韩国产在线观看 | 精品国产乱码久久久久久天美 | 免费三级网 | 99热精品在线 | 午夜影院一级 | 激情影音| 日韩综合一区二区三区 | 国产精品爽爽久久久久久蜜臀 | 成人高清av在线 | 国产成人99av超碰超爽 | 天天艹| 久热久草在线 | 一区二区视频播放 | 国产中文在线视频 | 日韩大片免费在线观看 | 激情电影在线观看 | 久久人人爽人人爽人人片av软件 | sesese图片| 久一久久 | 日韩在线视频免费播放 | 欧美成人一二区 | 黄色福利视频网站 | 久久久久在线 | 国产精品嫩草影视久久久 | 97自拍超碰| 亚洲自拍自偷 | 欧美日韩久久不卡 | 久久99久久99精品免观看软件 | 极品久久久 | 久久亚洲日本 | 五月天亚洲精品 | 在线观看黄网站 | 91精品在线看 | 精品久久久久一区二区国产 | 97精品欧美91久久久久久 | 精品视频在线免费 | 国产精品123 | 探花视频在线观看免费 | 欧美另类性 | 国产在线久草 | 色婷婷九月 | 日本性高潮视频 | 欧美一级日韩免费不卡 | 在线观看日韩免费视频 | 成人动漫视频在线 | 久久久久亚洲天堂 | 久久人人爽人人片 | 亚洲欧美经典 | www.99热精品 | 成人黄色小说在线观看 | 一区精品在线 | 午夜久久久久久久久 | 欧美日韩一区二区免费在线观看 | 九九视频精品在线 | 麻花豆传媒一二三产区 | 天天干夜夜夜操天 | 天天干天天干天天色 | 在线а√天堂中文官网 | 在线观看香蕉视频 | 色资源网免费观看视频 | 中文字幕中文字幕中文字幕 | 亚洲精品欧美专区 | 中文字幕日本在线观看 | 久久老司机精品视频 | 91污在线观看 | 玖玖在线看 | 欧美综合在线视频 | 波多野结衣在线观看一区二区三区 | 国产成人三级一区二区在线观看一 | 国产成人久久精品77777 | 国产精品日韩在线播放 | 午夜精品电影 | 91福利小视频 | 免费av在线网 | 久草在线免费在线观看 | 久草视频手机在线 | 国产精品密入口果冻 | 一级电影免费在线观看 | 国产色小视频 | bbbbb女女女女女bbbbb国产 | 国产xxxx性hd极品 | 青青河边草手机免费 | 国内精品在线观看视频 | 天天夜夜亚洲 | 久av在线 | 久久国产精品一区二区三区 | 中文字幕在线免费看线人 | 99久久久久久 | www在线观看视频 | 成人在线播放免费观看 | 亚色视频在线观看 | 久久久国产成人 | 91在线视频免费观看 | 夜色资源站国产www在线视频 | 一二三区在线 | 欧美日韩高清在线 | 精品国产欧美一区二区三区不卡 | 欧美日韩一区二区三区在线免费观看 | 亚洲三区在线 | 成人毛片一区 | 五月婷婷伊人网 | 日本久久成人 | 日韩av片免费在线观看 | 亚洲国产一区二区精品专区 | 日韩免费视频一区二区 | 日本九九视频 | 夜夜夜夜夜夜操 | 美女黄久久 | 91社区国产高清 | 日日夜夜天天综合 | 中文字幕免费高清在线观看 | 婷婷丁香激情综合 | 国产在线观看 | 一二三区在线 | 亚洲天天在线日亚洲洲精 | 色综合天天色综合 | 毛片1000部免费看 | 国产高清在线观看av | 正在播放一区二区 | 国产精品人人做人人爽人人添 | 国产精品伦一区二区三区视频 | www激情网 | 黄色免费看片网站 | 久久精品久久精品久久精品 | 免费观看一区二区三区视频 | 久久天堂亚洲 | www国产亚洲精品久久网站 | 日日夜夜精品网站 | 日产av在线播放 | 91精品久久久久久久久久久久久 | www.夜色321.com| 69中文字幕 | 97视频在线免费观看 | 成年人免费看片 | 日韩av中文 | 黄污网 | 久久er99热精品一区二区 | 日韩中文字幕电影 | 日韩黄色网络 | 亚洲国产成人在线 | 久久免费a | 欧美一区免费在线观看 | av在线一二三区 | 亚洲深夜影院 | 欧美最猛性xxxxx亚洲精品 | 久久福利剧场 | 国产一区在线不卡 | a级国产乱理伦片在线播放 久久久久国产精品一区 | 天天操天天操天天操天天操天天操 | 精品视频123区在线观看 | 超碰人人91| 视频在线观看日韩 | 久久精品视频在线播放 | 久久精品久久国产 | 91视频电影 | 欧美一区二区三区不卡 | 欧美一二三区在线播放 | 亚洲播放一区 | 精品免费久久久久久 | 伊人亚洲综合网 | 人人爽久久久噜噜噜电影 | 综合五月 | 久久久福利视频 | 欧美va天堂在线电影 | 高清国产午夜精品久久久久久 | 国产精品久久久久久久久大全 | 三级黄色理论片 | 91九色在线视频观看 | 中文字幕在线播放一区 | 在线播放国产一区二区三区 | 成年人免费电影 | 深爱婷婷网 | 久久tv| 国产a级片免费观看 | 久久人人爽人人爽人人片av免费 | 国产欧美最新羞羞视频在线观看 | 黄色小视频在线观看免费 | 亚洲91精品在线观看 | 欧美性受极品xxxx喷水 | 日韩免费成人av | 中文字幕亚洲欧美日韩 | 蜜桃av人人夜夜澡人人爽 | 91正在播放| 精品v亚洲v欧美v高清v | 日日麻批40分钟视频免费观看 | 日韩a免费| 午夜精品99久久免费 | avove黑丝 | 国产成人免费观看久久久 | 成人a毛片 | 99国产精品久久久久久久久久 | 在线黄色毛片 | 免费观看性生活大片 | 国外av在线 | 亚洲色图激情文学 | 成 人 黄 色视频免费播放 | 欧美一区二区三区激情视频 | 欧美一区二区在线 | 久久的色 | 亚洲色影爱久久精品 | 麻豆视传媒官网免费观看 | 国产剧在线观看片 | 四虎成人精品永久免费av | 精品日韩在线 | 久久精品一区二区三区国产主播 | a级国产乱理伦片在线播放 久久久久国产精品一区 | 日韩激情中文字幕 | 日本精品视频一区 | 色资源中文字幕 | 91精品国产自产91精品 | 欧美精品久久久久a | 天天干天天干天天干天天干天天干天天干 | 久久成人亚洲欧美电影 | 国产精品白浆视频 | 欧美日韩一区二区在线观看 | 亚洲伊人av | 欧美国产日韩一区二区三区 | 亚洲视频免费在线观看 | 久久国产精品免费看 | 91成人在线视频 |