日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

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

编程问答

递归下降语法分析程序

發布時間:2025/4/14 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 递归下降语法分析程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文法G[E]

E –> E + T | T

T –> T + F | F

F –> i | (E)

?

消除左遞歸

E –> TE’

E’-> +TE’

E’-> ε

T –> FT’

T’–> *FT’

T’-> ε

F -> i|(E)

?

編碼實現

#include<iostream>

using namespace std;

?

void E();

void E1();

void T();

void T1();

void F();

?

char ReadToken();

bool Match(char a);

void IsSuccess();

?

char token;

int cur = 0; // 當前字符索引

char *str = "i+i*i+(i*i)#"; // 語句

?

void main()

{

??? ReadToken();

?? if(!Match('#'))

????? E();

}

void E()

{

?? T();

?? E1();

}

void T()

{

?? F();

?? T1();

}

void E1()

{

?? if(Match('+'))

?? {

????? ReadToken();

????? IsSuccess();

????? T();

????? E1();

?? }

}

void T1()

{

?? if(Match('*'))

?? {

????? ReadToken();

????? IsSuccess();

????? F();

????? T1();

?? }

}

void F()

{

?? if(Match('('))

?? {

????? ReadToken();

????? IsSuccess();

????? E();

????? if(Match(')'))

????? {

??????? ReadToken();

??????? IsSuccess();

????? }

????? else

????? {

??????? cout << "error" << endl;

????? }

?? }

?? else if(Match('i'))

?? {

????? ReadToken();

????? IsSuccess();

?? }

?? else if(Match('#'))

?? {

????? cout << "success" << endl;

?? }

?? else

?? {

?? ??? cout << "error" << endl;

?? }

}

char ReadToken()

{

?? return token = str[cur++];

}

bool Match(char ch)

{

?? if(token == ch)

????? return true;

?? return false;

}

void IsSuccess()

{

?? if(Match('#'))

?? {

????? cout << "success!" << endl;

????? exit(0);

?? }

}

轉載于:https://www.cnblogs.com/CPFlying/archive/2010/04/27/1721913.html

總結

以上是生活随笔為你收集整理的递归下降语法分析程序的全部內容,希望文章能夠幫你解決所遇到的問題。

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