Javacc的實(shí)例分析-創(chuàng)新互聯(lián)

這篇文章將為大家詳細(xì)講解有關(guān)Javacc的實(shí)例分析,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括仁和網(wǎng)站建設(shè)、仁和網(wǎng)站制作、仁和網(wǎng)頁(yè)制作以及仁和網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,仁和網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到仁和省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

PARSER_BEGIN(Simple1)
public class Simple1 {
   public static void main(String args[]) throws ParseException {
       Simple1 parser = new Simple1(System.in);
       parser.Input();
   }
}
PARSER_END(Simple1)

void Input() :
{}
{
   MatchedBraces() (" "|"")*
}
void MatchedBraces() :
{}
{
   "{" [ MatchedBraces() ] "}"
}

   設(shè)置好javacc的bin目錄后,在命令提示符下輸入javacc Simple1.jj    然后javacc就會(huì)為你生成下面幾個(gè)java源代碼文件
Simple1.java
Simple1TokenManager.java
Simple1Constants.java
SimpleCharStream.java
Token.java
TokenMgrError.java

   其中Simple1就是你的語(yǔ)法分析器的對(duì)象,它的構(gòu)造函數(shù)參數(shù)就是要分析的輸入流,這里的是System.in。 class Simple1就定義在標(biāo)記PARSER_BEGIN(Simple1)和PARSER_END(Simple1)之間。但是必須清楚的是,PARSER_BEGIN和PARSER_END中的名字必須是詞法分析器的名字(這里是Simple1)。
   PARSER_END下面的定義就是文法非終結(jié)符號(hào)的定義了。
   Simple1的文法基本就是:

       Input -> MatchedBraces (" "|"")*
       MatchedBraces -> “{“ MatchedBraces “}”

   從它的定義我們可以看到,每個(gè)非終結(jié)符號(hào)對(duì)于一個(gè)過(guò)程。比如Input的過(guò)程

void Input() :
{}
{
   MatchedBraces() (" "|"")*
}

   在定義void Input后面記住需要加上一個(gè)冒號(hào)“:”,然后接下來(lái)是兩個(gè)塊{}的定義。
   第一個(gè){}中的代碼是定義數(shù)據(jù),初試化數(shù)據(jù)的代碼。第二個(gè){}中的部分就是真正定義Input的產(chǎn)生式了。
   每個(gè)產(chǎn)生式之間用”|”符號(hào)連接。
   注意:這里的產(chǎn)生式并非需要嚴(yán)格BNF范式文法,它的文法既可以是BNF,同時(shí)還可以是混合了正則表達(dá)式中的定義方法。比如上面的 Input -> MatchedBraces (" "|"")*
中(“ ”|””)* 就是個(gè)正則表達(dá)式,表示的是 或者的0個(gè)到無(wú)限個(gè)的重復(fù)的記號(hào)。而是javacc系統(tǒng)定義的記號(hào)(TOKEN),表示文件結(jié)束符號(hào)。
   除了,無(wú)論是系統(tǒng)定義的TOKEN,還是自定義的TOKEN, 里面的TOKEN都是以的方式表示。

   每個(gè)非終結(jié)符號(hào)(Input和MatchedBraces)都會(huì)在javacc生成的Simple1.java中形成Class Simple1的成員函數(shù)。當(dāng)你在外部調(diào)用Simple1的Input,那么語(yǔ)法分析器就會(huì)開(kāi)始進(jìn)行語(yǔ)法分析了。

關(guān)于Javacc的實(shí)例分析就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

分享名稱:Javacc的實(shí)例分析-創(chuàng)新互聯(lián)
本文來(lái)源:http://www.muchs.cn/article48/cesjep.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開(kāi)發(fā)、網(wǎng)站導(dǎo)航Google、品牌網(wǎng)站設(shè)計(jì)、營(yíng)銷型網(wǎng)站建設(shè)、電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

綿陽(yáng)服務(wù)器托管