一、實驗目的:
了解掌握算符優先分析的基本方法、內容;
學會科學思考並解決問題,提高程式設計能力。
二、實驗內容與要求:
用算符優先分析方法設計乙個分析解釋程式,對輸入的賦值語句、輸出語句、清除語句進行詞法分析、語法分析、表示式求值並儲存於指定變數中;若存在錯誤,提示錯誤相關資訊。
三、文法表示:
s→v=e|e?|clear
e→e+t|e-t|t
t→t*f|t/f|f
f→ (e)|v|c
四、設計思路:
(1) 設計儲存資料結構
char *vn=0,*vt=0;//非終結符和終結符陣列
char firstvt[n][n],lastvt[n][n],table[n][n];
typedef struct //符號對(p,a)
vn_vt;
typedef struct //棧
stack;
(2) 根據文法求firstvt集和lastvt集
(3) 構造算符優先分析表
(4) 構造總控程式
五、程式**:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define
max507
#define
_crt_secure_no_warningscode
using
namespace
std;
class
wfvoid
insert
(char
str)
void
()};
char
relation
[max
][max
];vector
<
char
>vt;
vector
<
wf>
vn_set
;map
<
string
,int
>
vn_dic
;set
<
char
>
first
[max
];set
<
char
>
last
[max
];int
used
[max
];int
vis[
max];
void
dfs(
intx
)else
first[x
].insert
(str[0
]);}
}void
make_first
()#endif
}void
dfs1
(intx)
else
last[x
].insert
(str[n
]);}
}void
make_last
()#endif
}void
make_table
()if
(isupper
(str[k
])&&
!isupper
(str[k
+1]))if(k
>
str.
length()-
2)continue;if
(!isupper
(str[k
])&&
!isupper
(str[k
+2])&&
isupper
(str[k
+1]))relation
[str[k
]][str[k
+2]]=
'=';}}
#define
debug
#ifdef
debug
for(
inti=0
;isize()*
5;i++)
printf
("-"
);printf("
算符優先關係表"
);for
(inti=
0;isize()*
5;i++)
printf
("-"
);puts(""
);printf
("|%8s|",""
);for
(inti=
0;isize
();i
++)printf
("%5c%5s",vt
[i],"|"
);puts(""
);for
(inti=
0;i<(vt
.size()+
1)*10
;i++)printf
("-"
);puts(""
);for
(inti=
0;isize
();i
++)#endif
}int
main
()intx=
vn_dic[s
]-1;
vn_set[x
].insert(s
+j+2
);for
(intk=
0;kk++)
if(!
isupper(s
[k]))for
(intk=
j+2;
k<
len;
k++)
if(!
isupper(s
[k]))}
#define
debug
#ifdef
debug
puts
("************vt
集*******************"
);for
(inti=
0;isize
();i
++)printf
("%c ",vt
[i]);puts(""
);puts
("*************
產生式*****************"
);for
(inti=
0;i<
vn_set
.size
();i
++)vn_set[i
();puts
("************************************"
);#endif
make_first
();make_last
();make_table
();}
}
語法分析 編譯原理
實驗目的 對迴圈語句和條件判斷語句編寫詞法分析編譯程式,只能通過一遍掃瞄完成。用c 實現 實驗要求 1 關鍵字 for if then else while do 所有關鍵字都是小寫。2 運算子和分隔符 3 其他識別符號 id 和整型常數 num 通過以下正規式定義 id letter letter...
編譯原理 語法分析
根據上課內容順序寫的部落格,並不是按照書的目錄來的 使用龍書以及編譯程式設計原理 第二版 金成植 金英編著 老師的ppt是英文的,我自己隨便翻的,不一定對 上下文無關文法 語法分析書和抽象語法樹 二義性簡單語言的語法 知識圖譜 語法分析器的功能輸入 詞法單元 詞法單元序列 輸出 語法結構的內在表示式...
編譯原理 語法分析(二)
在第一篇文章中,我們介紹了如何用上下文無關文法描述一種語言的語法,和如何使用推導和規約構造一棵語法分析樹,以及如何對文法進行轉換使之能夠更適用於語法分析。在本篇文章中,我們將介紹如何使用自頂向下的方法進行語法分析,進一步的,我們將介紹一種更高效的 分析方法。為了下文需要和減少重複,我們先給出在下文中...