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

正文內(nèi)容

javacc學(xué)習(xí)手冊(cè)(完整版)

  

【正文】 JJTree在命令行或者JavaCC選項(xiàng)聲明中提供了下面這些選項(xiàng):只是一個(gè)特性。另外,一個(gè)明確節(jié)點(diǎn)通過(guò)整形表達(dá)式制定的所有孩子節(jié)點(diǎn)或者在一個(gè)條件節(jié)點(diǎn)作用域內(nèi)被壓入堆棧的所有節(jié)點(diǎn)被賦給此節(jié)點(diǎn)。節(jié)點(diǎn)的方法jjtOpen()被調(diào)用如果NODE_SCOPE_HOOK選項(xiàng)被設(shè)置為T(mén)rue,那么用戶自定義的方openNodeScope()將被調(diào)用并且以此節(jié)點(diǎn)為參數(shù)。 節(jié)點(diǎn)的生存周期一個(gè)節(jié)點(diǎn)的建立經(jīng)歷了一個(gè)序列步驟。 Token first_token, last_token。 ((MySimpleNode)n).first_token = getToken(1)。 一種用途是這些功能將用來(lái)存儲(chǔ)節(jié)點(diǎn)的首尾標(biāo)記符以便于輸入可以很容易的被重現(xiàn)。條件節(jié)點(diǎn)作用域內(nèi)的最終用戶行為可以通過(guò)調(diào)用方法nodeCreated()來(lái)決定此節(jié)點(diǎn)是否被創(chuàng)建。當(dāng)代碼執(zhí)行過(guò)程中,子節(jié)點(diǎn)已經(jīng)被從堆棧中彈出并被添加給這個(gè)被壓入堆棧的節(jié)點(diǎn)。 if (n != null) { (prefix + )。 } public Node jjtGetChild(int i) { return children[i]。 parser = p。 }如果VISITOR選項(xiàng)被設(shè)置,另一個(gè)實(shí)用的方法是{ public void childrenAccept(MyParserVisitor visitor)。}JJTree可以設(shè)置 “simple” 和 “multi”兩種模式之一。 節(jié)點(diǎn)(Node)對(duì)象JJTree定義了一個(gè)所有語(yǔ)法分析樹(shù)節(jié)點(diǎn)必須實(shí)現(xiàn)的接口Node,這個(gè)接口定義諸如:設(shè)置節(jié)點(diǎn)的父節(jié)點(diǎn)、增加子節(jié)點(diǎn)、重新獲得子節(jié)點(diǎn)等操作方法。需要注意:節(jié)點(diǎn)聲明可以放到一個(gè)非終結(jié)符聲明的后面,例如下面:Void Term() MyTerm:{……}{……}這樣當(dāng)對(duì)Term的展開(kāi)成功時(shí),就會(huì)生成一個(gè)名字為MyTerm的節(jié)點(diǎn)。上面表達(dá)式邏輯不清,你必須明確的使用條件式:我們可以手動(dòng)操作這個(gè)棧,如彈出、壓入、取棧頂?shù)然静僮鳌km然JavaCC是一個(gè)自上而下的解析器(即LL(K)LOOKAHEAD是JavaCC語(yǔ)法的一部分,用來(lái)輔助分析器選擇正確的產(chǎn)生式。對(duì)處理器有用的正則表達(dá)式應(yīng)該定義為T(mén)OKEN類型,如英文單詞;對(duì)于需要忽略的正則表達(dá)式應(yīng)該定義為SKIP類型,如空白字符。JavaCC允許如下的產(chǎn)生式運(yùn)算:① 基本定義:A→B② 選擇運(yùn)算:A→B|C③ 重復(fù)運(yùn)算:A→B*或者A→B+④ 可選運(yùn)算:A→B?或者A→[B] ⑤ 括號(hào)運(yùn)算:A→(B) 使用JavaCC開(kāi)發(fā)分析器的步驟1) 編寫(xiě)正則表達(dá)式來(lái)描述待分析的語(yǔ)言的詞法結(jié)構(gòu)。Javacc中的語(yǔ)法表示吸收了UNIX中正規(guī)文法的一些記號(hào),下面是一些:l [ ]:其中的內(nèi)容是可選的。正則表達(dá)式產(chǎn)生式主要用于生成TokenManager(符號(hào)管理器)。一般先定義終結(jié)符,即詞法規(guī)則。JavaCC的選項(xiàng)有STATIC、IGNORE_CASE等20多個(gè)(參考文獻(xiàn):)。l 要采用全局提示,只要將LOOKAHEAD=k寫(xiě)到Options塊中即可(當(dāng)然也可以寫(xiě)到j(luò)avacc的命令行里),這樣javacc產(chǎn)生的分析器就可以分析LL(K)語(yǔ)法生成的語(yǔ)言。l 錯(cuò)誤報(bào)告:JavaCC能夠準(zhǔn)備指出解析錯(cuò)誤的位置便于調(diào)試。由于歷史原因,中文字符存在多種編碼方式,最典型的編碼有GB2312(國(guó)標(biāo)碼),Big5(港臺(tái)地區(qū)編碼)和UTF 8(UNICODE變長(zhǎng)編碼)。l 定制化:JavaCC提供了很多的功能選項(xiàng),來(lái)定制它的行為還有它所產(chǎn)生的分析器程序的行為。4. 運(yùn)行如下命令查看是否正常安裝Javacc versionJavacc copyright infojavacc optionsettings inputfile 2 Javacc工具和生成分析程序的原理介紹 三個(gè)工具(或可執(zhí)行的命令) :1. javacc 用來(lái)處理語(yǔ)法文件(jj)生成分析器代碼;JavaCC運(yùn)行程序讀入用JavaCC語(yǔ)法編寫(xiě)的源程序(后綴名為*.jj),即某一語(yǔ)言的詞法規(guī)則、文法規(guī)則以及與該文法規(guī)則相聯(lián)系的語(yǔ)義動(dòng)作說(shuō)明(Java代碼段),就能生成Java代碼的該文法的詞法分析器和語(yǔ)法分析器。而且,這些生成的程序在運(yùn)行時(shí)不再需要JavaCC的任何支持。l 純Java編寫(xiě):JavaCC可以運(yùn)行在所有當(dāng)前所有JVM中l(wèi) 文檔生成:JavaCC包含了一個(gè)叫做JJDoc的工具,該工具可以將語(yǔ)法文件轉(zhuǎn)換為HTML格式的幫助文檔。為了讓分析器能夠處理各種不同編碼格式的輸入,需要使用特定的字符集來(lái)對(duì)字節(jié)流進(jìn)行解碼。 javacc生成分析程序的原理介紹javacc采用自頂向下的分析方法,而且沒(méi)有回溯功能,因此如何解決沖突的問(wèn)題,是程序員的責(zé)任。因?yàn)閖avacc的基礎(chǔ)是自頂向下的分析方法,所以必須要解決的下面的兩個(gè)問(wèn)題:左遞歸和公因子。l 也可以設(shè)置一個(gè)局部的LOOKAHEAD,這樣既保持了LL(1)的高效性,又可以解決上述沖突。舉例:options {LOOKAHEAD = 1。單詞的類型:TOKEN:TOKEN區(qū)中匹配的合法單詞序列要傳遞給語(yǔ)法分析器進(jìn)行語(yǔ)法分析,在語(yǔ)法規(guī)則中作為終結(jié)符出現(xiàn);SPECIAL_TOKEN: SPECIAL_TOKEN區(qū)中匹配的單詞要傳遞給語(yǔ)法分析器進(jìn)行訪問(wèn),但并不在語(yǔ)法規(guī)則中作為終結(jié)符出現(xiàn);SKIP: SKIP區(qū)中定義的終結(jié)符會(huì)被詞法分析器忽略。如果需要額外的操作輔助進(jìn)行詞法分析,需要編寫(xiě)token_manager_decls產(chǎn)生式。l + :前面的內(nèi)容出現(xiàn)一次或多次。2) 編寫(xiě)B(tài)NF產(chǎn)生式和EBNF產(chǎn)生式來(lái)描述語(yǔ)言的語(yǔ)法結(jié)構(gòu)。4) 根據(jù)JavaCC的語(yǔ)法改寫(xiě)(2)中的語(yǔ)法產(chǎn)生式。JavaCC定義了三種LOOKAHEAD方式:AMOUNT LOOKAHEAD(數(shù)目先行),SYMTACTIC LOOKAHEAD(語(yǔ)法先行),SEMANTIC LOOKAHEAD(語(yǔ)義先行)。 通常我們只要用LL(1)即可 ),但是JJTree構(gòu)造語(yǔ)法樹(shù)過(guò)程卻是從底至上構(gòu)建的。jjTree也會(huì)生成一個(gè)實(shí)現(xiàn)了Node接口的SimpleNode類,它是被壓入分析棧的節(jié)點(diǎn)類。1. NodeName(數(shù)字):這種形式的節(jié)點(diǎn)稱為確定性節(jié)點(diǎn),當(dāng)生成以這個(gè)節(jié)點(diǎn)為根的分析子樹(shù)時(shí),它會(huì)從棧里彈出指定個(gè)數(shù)的節(jié)點(diǎn)作為它的孩子,然后將該節(jié)點(diǎn)入棧;2. NodeName(布爾表達(dá)式):這種形式的節(jié)點(diǎn)稱為非確定節(jié)點(diǎn),當(dāng)對(duì)它所對(duì)應(yīng)的非終結(jié)符進(jìn)行展開(kāi)時(shí),jjTree會(huì)對(duì)棧做一個(gè)記號(hào),說(shuō)明非終結(jié)符從何處開(kāi)始展開(kāi),當(dāng)展開(kāi)結(jié)束后,如果布爾表達(dá)式的值為真,就從標(biāo)記處彈出節(jié)點(diǎn)區(qū)域內(nèi)壓入堆棧的所有子節(jié)點(diǎn),構(gòu)成新的分析子樹(shù),并將它壓入棧中。 ( ... ) N(true) ( a() )也可以放到某個(gè)非終結(jié)符的展開(kāi)的某一段的后面,例如:Void VarList():{…}{l 缺省的非終結(jié)符的聲明缺省的非終結(jié)符的聲明相當(dāng)于它后面聲明了一個(gè)跟它同名的(大寫(xiě))節(jié)點(diǎn),例如:Void Term():{…}{…}相當(dāng)于Void Term()TERM:{…}{…}為了使對(duì)非終結(jié)符的處理采用void方式的處理,(缺省為假)。public interface Node { /* 一個(gè)節(jié)點(diǎn)成為當(dāng)前節(jié)點(diǎn)后,該方法被調(diào)用,表示可以添加它的孩子節(jié)點(diǎn)*/ public void jjtOpen()。在“simple”[單一]模式下語(yǔ)法分析樹(shù)節(jié)點(diǎn)都是“SimpleNode”類型。 }這對(duì)于實(shí)現(xiàn)前序和后序遍歷很有幫助。 } public void jjtOpen() { } public void jjtClose() { } public void jjtSetParent(Node n) { parent = n。 } public int jjtGetNumChildren() { return (children == null) ? 0 : 。 } } } }} 節(jié)點(diǎn)作用域和用戶行為這些孩子節(jié)點(diǎn)可以通過(guò)諸如這個(gè)節(jié)點(diǎn)的方法jjtGetChild().進(jìn)行訪問(wèn)。如果節(jié)
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1