xxxx18一60岁hd中国/日韩女同互慰一区二区/西西人体扒开双腿无遮挡/日韩欧美黄色一级片 - 色护士精品影院www

資源簡介

一:實驗內容: 編寫語法分析程序,實現對算術表達式的語法分析,要求所分析的算術表達式由如下的文法產生。 ◆E->E+T|E-T|T ◆T->T*F|T/F|F ◆F->id|(E)|num 二:實驗要求: 在對表達式進行分析的同時,輸出所采用的產生式。 可以采用多種方法 ◆編寫遞歸調用程序,實現自頂向下的分析。 ◆編寫LL(1)語法分析程序,要求: ◇編程實現算法4.2,為給定的文法自動構造預測分析表 ◇編程實現算法4.1,構造LL(1)預測分析程序, ◆編寫語法分析程序,實現自底向上的分析,要求: ◇構造識別所有活前綴的DFA ◇構造LR分析表 ◇編程實現算法4.3,構造LR分析程序 ◆利用yacc自動生成語法分析程序,調用LEX自動生成的詞法分析器程序

資源截圖

代碼片段和文件信息

#include?
#include?
#include?
#define?PRO_NUM?11??//產生式個數?
#define?PRO_MAXLEN?8??//產生式最大長度?
#define?TER_NUM?9??//終結符個數?
#define?UNTER_NUM?5??//非終結符個數
#define?F_MAXLEN?8??//FIRST集和FOLLOW集的大小?
#define?STR_MAXLEN?50??//待分析的輸入表達式的最大長度?
#define?IDNUM_MAXLEN?10??//待分析的輸入表達式中id和num的的最大長度?
#define?ERROR?-1??//分析表項為空白,錯誤入口?
#define?SYNCH?-2??//分析表項為同步信息synch,同步錯誤入口?
#define?ID?1??//字母標記?
#define?NUM?2??//數字標記
#define?OTHER?0??//其他字符標記?
#define?TRUE?1
#define?FALSE?0
#define?NOTFOUND?-1

typedef?int?Status;??//返回狀態類型?

using?namespace?std;

char?grammar[PRO_NUM][PRO_MAXLEN];??//文法表?
char?ter_symbol[TER_NUM];??//終結符表?
char?unter_symbol[UNTER_NUM];??//非終結符表?
char?FIRST[UNTER_NUM][F_MAXLEN];??//FIRST集
char?FOLLOW[UNTER_NUM][F_MAXLEN];??//FOLLOW集
int?M[UNTER_NUM][TER_NUM];??//LL(1)語法預測分析表
char?str[STR_MAXLEN+1];??//輸入緩沖區

deque?s;

//構成LL(1)分析器基本函數?
void?Initial?(void);??//初始化
void?Create_Analysis?(void);??//構造LL(1)語法預測分析表?
void?GetString?(void);??//獲取待分析輸入表達式????????????????
void?Analyse_Output?(void);??//使用LL(1)語法預測分析表分析輸入的表達式并輸出分析結果

//LL(1)分析器輔助函數?
int?GetStrLen?(void);??//獲取輸入表達式的長度?
Status?Judge_Ter?(char?ch);??//判斷字符ch是否為終結符?
Status?Judge_Unter?(char?ch);??//判斷字符ch是否為非終結符
int?Get_Ter_Num?(char?ch);??//返回終結符ch在終結符表中的下標?
int?Get_Unter_Num?(char?ch);??//返回非終結符ch在終結符表中的下標?
Status?In_FIRST?(char?A?char?ch);??//判斷終結符ch是否在非終結符A的FIRST集中
Status?In_FOLLOW?(char?A?char?ch);??//判斷終結符ch是否在一個非終結符A的FOLLOW集中
void?Output_Pro?(int?i);??//打印分析過程中輸出的產生式
void?Output_Stack?(void);??//打印當前棧中的符號
void?Output_Buffer?(int?ip);??//打印當前輸入緩沖區中的符號串
Status?Judge_Id?(char?ch);??//判斷字符ch是否為構成id的字母
Status?Judge_Num?(char?ch);??//判斷字符ch是否為構成num的數字
Status?Judge_Exceed?(void);??//判斷輸入表達式中代表id和num的子串是否超過最大長度

int?main?()
{?
????Initial();??//初始化?
????Create_Analysis();??//構造LL(1)語法預測分析表?
????GetString();??//獲取待分析輸入表達式?
????Analyse_Output?();??//使用LL(1)語法預測分析表分析輸入的表達式并輸出分析結果
system(“pause“);
????return?0;
}

void?Initial?(void)??//初始化
{
????int?i?j;???
????s.push_back(‘$‘);
????s.push_back(‘E‘);??//初始化棧:構造空棧,并壓入‘$‘與‘E‘?

????//設置文法表,存儲P代表E‘,Q代表T‘,e代表εi代表id,n代表num?
????strcpy?(grammar[0]?“E#TP#“);??//E?→TE‘
????strcpy?(grammar[1]?“P#+TP#“);??//E‘?→+TE‘
????strcpy?(grammar[2]?“P#-TP#“);??//E‘?→-TE‘
????strcpy?(grammar[3]?“P#e#“);??//E‘?→ε
????strcpy?(grammar[4]?“T#FQ#“);??//T?→FT‘
????strcpy?(grammar[5]?“Q#*FQ#“);??//T‘?→*FT‘
????strcpy?(grammar[6]?“Q#/FQ#“);??//T‘?→/FT‘?
????strcpy?(grammar[7]?“Q#e#“);??//T‘?→ε
????strcpy?(grammar[8]?“F#i#“);??//F?→id
????strcpy?(grammar[9]?“F#(E)#“);??//F?→(E)
????strcpy?(grammar[10]?“F#n#“);??//F?→num
????
????for?(i?=?0;?i?????????for?(j?=?0;?j?????????????M[i][j]?=?ERROR;???
????strcpy?(ter_symbol?“+-*/()in$“);??//初始化終結符表??
????strcpy?(unter_symbol?“EPTQF“);??//初始化非終結符表???
????
????//初始化FIRST集
????strcpy?(FIRST[0]?“(in#“);
????strcpy?(FIRST[1]?“+-e#“)

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件??????15166??2012-12-28?19:16??語法分析程序的設計與實現\語法分析器方法2.cpp

?????文件??????11588??2012-12-28?21:11??語法分析程序的設計與實現\語法分析器方法3.cpp

?????文件??????26908??2013-01-15?13:03??語法分析程序的設計與實現\語法分析實驗報告.docx

?????文件?????680042??2012-12-26?22:33??語法分析程序的設計與實現\語法分析程序的設計與實現.pdf

?????目錄??????????0??2013-01-15?13:06??語法分析程序的設計與實現

-----------?---------??----------?-----??----

???????????????733704????????????????????5


評論

共有 條評論