freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

嵌入式瀏覽器開發(fā)畢業(yè)設(shè)計(jì)畢業(yè)論文-在線瀏覽

2024-08-08 13:06本頁面
  

【正文】 用的HTML詞法分析。(4) 支持基本IO,支持采用線程的網(wǎng)絡(luò)傳輸。在后期簡化了目標(biāo),雖然人員減少,但也能夠?qū)崿F(xiàn)主要的工作。 第二章 HTML詞法分析器的設(shè)計(jì)及其應(yīng)用HTML詞法分析是瀏覽器設(shè)計(jì)的基礎(chǔ)環(huán)節(jié)之一,也是整個(gè)設(shè)計(jì)過程中重要的前端工作,其數(shù)據(jù)結(jié)構(gòu)的擬定與接下來的語法分析和布局算法密切相關(guān),詞法分析的效率與準(zhǔn)確性、容錯(cuò)性也關(guān)系到整個(gè)瀏覽器設(shè)計(jì)的質(zhì)量。Bit Token是Netbit Browser的HTML詞法分析器,使用標(biāo)準(zhǔn)C編程,Netbit Browser是基于Linux/Gtk的瀏覽器,開放源碼項(xiàng)目,網(wǎng)址是。主要由以下幾個(gè)部分組成: 初始化:完成對數(shù)據(jù)結(jié)構(gòu)的初始化,主要是分配內(nèi)存,變量賦初值。 元素的分析:提取元素的名稱、屬性和值域。 數(shù)據(jù)結(jié)構(gòu)typedef struct BitTokenContext{char * strBuffer。int curPosition。 //全局HTML代碼int global_bufferLength。BitTokenList *tokenList。BitPTagList pTagList。BitTokenContext是用于存儲當(dāng)前待分析網(wǎng)頁全局屬性的數(shù)據(jù)結(jié)構(gòu),其中TokenList是核心的元素節(jié)點(diǎn)鏈表。下面給出該鏈表的數(shù)據(jù)結(jié)構(gòu),是很簡單的雙向鏈表。 //元素節(jié)點(diǎn) struct TokenList *priou。}BitTokenList,*BitPTokenList。 //節(jié)點(diǎn)類型,如定義的HTML_BODY,HTML_TXT等。 //如果是HTML_TXT型元素,則為其內(nèi)容,否則為空BOOL end。 //元素屬性鏈表,因?yàn)榭赡苡卸鄠€(gè)屬性,所以使用鏈表存儲BitTokenAttrList *attrList_tail。請注意,以上出現(xiàn)tail標(biāo)記的指針變量,如BitTokenList * tokenList_tail等,其作用是用于保存鏈表結(jié)尾節(jié)點(diǎn)指針,便于在釋放內(nèi)存時(shí),直接找到鏈尾,提高了算法的效率。 (3) 如果遇到回車、空格,則跳過。 (5) 如果非以上情況,則認(rèn)為遇到文字,處理這段文字,使用函數(shù)Token_Consum_PlainText()。(6) 循環(huán)以上操作,直到該網(wǎng)頁分析完畢。 算法效率與改進(jìn):采用以上的基本算法,是可用的,但當(dāng)網(wǎng)頁比較大的時(shí)候,比如600K,該算法的效率成倍下降,這主要是由于要處理的字符串太大,在內(nèi)存中完成查找、替換、復(fù)制、移動等操作,響應(yīng)時(shí)間明顯下降。分段進(jìn)行詞法分析的算法復(fù)雜度明顯增加,比如,當(dāng)每段定為1024字節(jié),在第1024字節(jié)處,可能正好將一個(gè)完整元素截?cái)?,按常?guī)分析方法會造成錯(cuò)誤。具體做法是:判斷1024字節(jié)處是否為元素結(jié)束字符 ‘’,如果不是,則判斷前一個(gè)字節(jié),直到找到元素結(jié)束字符為止,這樣可保證至少包含一個(gè)元素。下面是一段很簡單的HTML代碼。詞法分析將網(wǎng)頁的文本數(shù)據(jù)流以清晰的結(jié)構(gòu)表現(xiàn)出來,這樣,在后面的應(yīng)用中就可以很容易的遍歷各節(jié)點(diǎn),并輕松地獲得各元素節(jié)點(diǎn)的屬性?!癏TML智能分析”同樣使用Bit Token詞法分析器,“HTML智能分析”是一個(gè)網(wǎng)頁信息提取、處理軟件。統(tǒng)計(jì)網(wǎng)頁的有關(guān)信息。用戶可使用該軟件來將HTML轉(zhuǎn)為TXT格式,其對HTML中文字內(nèi)容的提取準(zhǔn)確、快速、不含冗余信息,版式工整清晰,保持本來面貌。比如PRE標(biāo)記,代表所包含的內(nèi)容瀏覽器應(yīng)不予分析,按TXT格式輸出,而如表格TR等元素則意味著需要換行。這就造成了矛盾。造成轉(zhuǎn)換后的版式“失真“。由于“HTML智能分析”使用了底層的詞法分析技術(shù),還可以很容易的過濾掉SCRIPT與STYLE(樣式表)。以下是該程序的片斷: pTtokenList=global_cxtokenList。 //取下一個(gè)節(jié)點(diǎn) } //while這段程序?qū)嶋H上就是一個(gè)簡單的語法分析和布局的過程。例如語句:Alert(“font is a tag”)。目前的Bit Token由于開發(fā)時(shí)間所限,未對其加以特殊處理,存在一些問題,但由于瀏覽器對Javascript的支持是較復(fù)雜的工作,目前的Netbit Browser尚不予實(shí)現(xiàn),因而沒有導(dǎo)致明顯問題,而“HTML智能分析”這個(gè)軟件只是需要對Javascript進(jìn)行刪除操作,也不會造成影響。正如前面所述,HTML詞法分析是瀏覽器設(shè)計(jì)的基礎(chǔ)環(huán)節(jié)之一,但并非最重要和最具難度的環(huán)節(jié),若想開發(fā)出效果較好的瀏覽器產(chǎn)品,還要在布局和GUI設(shè)計(jì)上多下功夫。 開發(fā)環(huán)境JavaScript Reference與JavaScript API:JavaScript Reference是Mozilla所使用JavaScript開發(fā)環(huán)境,是使用ANSI C的獨(dú)立的開發(fā)包,據(jù)Mozilla文檔介紹,該開發(fā)包涉及到超過160家公司的版權(quán)。JavaScript Reference可以用于建立包含JavaScript runtime的Library或 DLL。由于使用了ANSI C編程,可以用VC、GCC等編譯器在不同平臺下編譯。關(guān)于JavaScript API,參見JavaScript API詳解。 JavaScript EngineJavaScript Engine是瀏覽器開發(fā)者為了利用JavaScript API來實(shí)現(xiàn)實(shí)際應(yīng)用而設(shè)立的中間層,用于初始化JavaScript環(huán)境,提供對JavaScript解釋、執(zhí)行的接口。下面介紹JavaScript Engine的主要功能和實(shí)現(xiàn)方法。(1) 初始化:內(nèi)存分配:rt=JS_Init(10000L)。初始化globalObj:globalObj = JS_NewObject(cx, amp。定義標(biāo)準(zhǔn)類:JS_InitStandardClasses(cx, globalObj)。定義報(bào)錯(cuò)函數(shù):JS_SetErrorReporter(cx,JS_ErrorReporter)。RegisterClassSize (cx,globalObj)。RegisterClassPolygon (cx,globalObj)。RegisterClassTDTimer (cx,globalObj)。(2) 提供對JavaScript解釋、執(zhí)行的接口函數(shù):TD_EvaluateScript(JSContext *cx,JSObject *obj, const char *bytes, uintN length,const char *filename, uintN lineno,jsval *rval) JavaScript與瀏覽器接合基本概念:JavaScript操作HTML元素的常見方式例:htmlheadscript!function ChangeImage(index){=a+index+.gif。軍人/abra onmouseover=ChangeImage(1)。由此產(chǎn)生兩個(gè)關(guān)鍵問題:1. javascript如何獲取HTML元素的名稱和屬性。下面分別闡述這兩個(gè)問題:首先介紹涉及到的瀏覽器流程:WidgetPaintProcessElementBuildPresBuildModelTokenizePARSE問題1解決:HTML元素作為Javascript對象進(jìn)行注冊。BuildModel的首要任務(wù)是將Token后的結(jié)點(diǎn)按包含關(guān)系展成一棵樹。注冊的過程是:定義新對象:JSObject *proto。proto))使用JS_DefineObject或JS_NewObject定義對象屬性:根據(jù)是否定義了該元素的名稱區(qū)別對待:if(TD_XMLContentIsNamedItem(aElement,amp。*aReturn=JS_DefineObject(JS_GetGlobalContext(),js_GetGlobalObject(),aNamemStr,amp。}else{ parent=aElementparentmScriptObject。ElementClass, proto, parent)。這樣,在編譯時(shí),HTML元素的標(biāo)識就能被Javascript編譯器識別,否則會報(bào)錯(cuò)變量未定義。具體可理解為:=””被執(zhí)行時(shí),相當(dāng)于為對象設(shè)置或改變屬性,此時(shí)SetElementProperty函數(shù)被調(diào)用(該函數(shù)在注冊該對象時(shí)由JSXMLElementClassInit捆綁給該對象,其內(nèi)容由用戶自己定義),SetElementProperty通過函數(shù)指針調(diào)用函數(shù)TD_JSXMLSetAtrByID,改變結(jié)點(diǎn)樹上結(jié)點(diǎn)屬性,并重新生成該節(jié)點(diǎn)對應(yīng)的widget,重畫界面。 瀏覽器消息響應(yīng)在主消息循環(huán)中調(diào)用TDWidgetProcessMsg,處理與widget有關(guān)消息。index)。最后一般為調(diào)用JavaScript執(zhí)行,實(shí)現(xiàn)實(shí)際響應(yīng)。 if(pAnchor) TD_EvaluateScript(JS_GetGlobalContext(),js_GetGlobalObject(), pAnchor,pAnchor,TDNULL,0,amp。}其中pAnchor(widget)對應(yīng)的JavaScript源碼,解釋執(zhí)行的結(jié)果就是調(diào)用為該對象注冊的函數(shù)來重畫該widget,從而實(shí)現(xiàn)動態(tài)效果。 后來被 ISO(國際標(biāo)準(zhǔn)化組織)接受為標(biāo)準(zhǔn),因此也稱為 ISO C。
SVID:System V 的接口描述。T Unix System V 操作 系統(tǒng)的文檔,是對 POSIX 標(biāo)準(zhǔn)的擴(kuò)展超集。X/Open 可移植性指南(由 X/Open Company, ), 是比 POSIX 更為一般的標(biāo)準(zhǔn)。相反,這些功能一般由標(biāo)準(zhǔn)的“函數(shù)庫”來提供。目前,流行的 Linux 系統(tǒng)使用 glibc 以上的版本。其他重要函數(shù)庫:除 glibc 之外,流行的 Linux 發(fā)行版中還包含有一些其他的函數(shù)庫,這些函數(shù)庫具有重要地位,例如:GNU Libtool,CrackLib,LibGTop。
(3) 系統(tǒng)調(diào)用系統(tǒng)調(diào)用是操作系統(tǒng)提供給外部程序的接口。
談到系統(tǒng)調(diào)用時(shí),需要注意如下幾點(diǎn):系統(tǒng)調(diào)用函數(shù)通常在成功時(shí)返回 0 值,不成功時(shí)返回非零值。系統(tǒng)調(diào)用是一個(gè)非常耗時(shí) 的過程。編程風(fēng)格最能體現(xiàn)一個(gè)程序員的綜合素質(zhì)。C 語言最初來自 UNIX 操作系統(tǒng),與 UNIX 的設(shè)計(jì)原則一樣,C 語言被廣泛認(rèn)可和使用的一個(gè)重要原因是它的靈活性以及簡潔性。Linus 為 Linux 內(nèi)核定義的 C 語言編碼風(fēng)格要點(diǎn)如下:
縮進(jìn)時(shí),使用長度為 8 個(gè)字符寬的 Tab 鍵。
大括號的位置。函數(shù)的定義體應(yīng)將左右大括號放在行首。}應(yīng)采用簡潔的命名方法。保持函數(shù)短小精悍。
(5) 庫和頭文件的保存位置
函數(shù)庫:/lib:系統(tǒng)必備共享庫
/usr/lib:標(biāo)準(zhǔn)共享庫和靜態(tài)庫
/usr/i486linuxlibc5/lib:libc5 兼容性函數(shù)庫
/usr/X11R6/lib:X11R6 的函數(shù)庫
/usr/local/lib:本地函數(shù)庫
頭文件:
/usr/include:系統(tǒng)頭文件
/usr/local/include:本地頭文件 Linux 上的編譯器和調(diào)試器(1) Linux 上的 C/C++ 編譯器和調(diào)試器
運(yùn)行 gcc/egcs:Linux 中最重要的軟件開發(fā)工具是 GCC。實(shí)際上,GCC 能夠編譯三種語言:C、C++ 和 Object C(C 語言的一種面向?qū)ο髷U(kuò)展)。
例如利用如下的命令可編譯生成可執(zhí)行文件,并執(zhí)行程序:$ gcc o factorial
$ ./factorial 5
GCC 可同時(shí)用來編譯 C 程序和 C++ 程序。在 Linux 中,C 源文件的后綴名為 .c,而 C++ 源文件的后綴名為 .C 或 .cpp。因此,通常使用 g++ 命令來完成 C++ 程序的編譯和連接,該程序會自動調(diào)用 gcc 實(shí)現(xiàn)編譯。這一選項(xiàng)將禁止 GNU C 的某些特色,
c 只編譯并生成目標(biāo)文件。
DMACRO=DEFN 以字符串“DEFN”定義 MACRO 宏。
g 生成調(diào)試信息。
IDIRECTORY 指定額外的頭文件搜索路徑DIRECTORY。
lLIBRARY 連接時(shí)搜索指定的函數(shù)庫LIBRARY。
o FILE 生成指定的輸出文件。
O0 不進(jìn)行優(yōu)化處理。
O2 進(jìn)一步優(yōu)化。
shared 生成共享目標(biāo)文件。
static 禁止使用共享連接。
w 不生成任何警告信息。
(3)gdb
GNU 的調(diào)試器稱為 gdb,該程序是一個(gè)交互式工具,工作在字符模式。gdb 是功能強(qiáng)大的調(diào)試程序,可完成如下的調(diào)試:設(shè)置斷點(diǎn);監(jiān)視程序變量的值;程序的單步執(zhí)行;修改變量的值。可在 makefile 中如下定義 CFLAGS 變量:CFLAGS = g,運(yùn)行 gdb 調(diào)試程序時(shí)通常使用如下的命令:gdb progname
(4) 創(chuàng)建和使用靜態(tài)庫創(chuàng)建一個(gè)靜態(tài)庫是相當(dāng)簡單的。
(5) 創(chuàng)建和使用共享庫特殊的編譯和連接選項(xiàng)D_REENTRANT使得預(yù)處理器符號 _REENTRANT 被定義,這個(gè)符號激活一些宏特性。由于庫是在運(yùn)行的時(shí)候被調(diào)入,因此這個(gè)選項(xiàng)是必需的,shared選項(xiàng)告訴編譯器產(chǎn)生共享庫代碼。因此,人們通常利用 make 工具來自動完成編譯工作。利用這種自動編譯可
點(diǎn)擊復(fù)制文檔內(nèi)容
語文相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1