遞迴下降分析子程式

來源:互聯網
上載者:User

【實驗目的】
1. 掌握 EBNF及其在遞迴下降分析子程式構造中的作用。
2. 掌握遞迴下降剖析器的構造方法。
【實驗內容】
文法:E→E+T | T,T→T*F | F,F→(E) | i
根據該文法編寫遞迴下降剖析器:
1. 輸入:任意符號串。
2. 處理:遞迴調用分析輸入串是否合法。
3. 輸出:串是否合法。
【實驗要求】
1.  根據上述文法的產生式規則用EBNF化簡之並繪製相應的文法圖。
2.  任選C/C++/Java 中的一種作為程式設計語言實現遞迴下降分析。

 

一、用EBNF化簡文法

化簡結果如下:E→T{+T}

                            F→F{*F}

                            F→i|(E)

二、程式部分代碼

    1.注意,本程式也是以#作為輸入結束標識,否則會分析錯誤

  2.程式入口

E();</p><p>if(ip == input.length-1)//說明輸入串已經分析完<br />System.out.println("分析結果:符合文法");<br />else//輸入串沒有分析完就結束<br />System.out.println("分析結果:ERROR不符合文法");

    3.核心代碼

public static void E()<br />{<br />T();<br />while(sym == '+')<br />{<br />ip++;<br />sym = input[ip];//advance<br />T();<br />}<br />}</p><p>public static void T()<br />{<br />F();<br />while(sym == '*')<br />{<br />ip++;<br />sym = input[ip];//advance<br />F();<br />}<br />}</p><p>public static void F()<br />{<br />if(sym == 'i')<br />{<br />ip++;<br />sym = input[ip];//advance<br />}<br />else<br />{<br />if(sym == '(')<br />{<br />ip++;<br />sym = input[ip];//advance</p><p>E();</p><p>if(sym == ')')<br />{<br />ip++;<br />sym = input[ip];//advance<br />}<br />else<br />{<br />System.out.println("分析結果:ERROR不符合文法");<br />System.exit(0);<br />}<br />}<br />else<br />{<br />System.out.println("分析結果:ERROR不符合文法");<br />System.exit(0);<br />}<br />}<br />}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.