資源簡介
關于編譯原理課設的要求,用C語言實現的詞法分析、語法分析及語義分析。主要完成定義語句和算術表達式的分析。

代碼片段和文件信息
#include
#include
#include
#include
#define?LL??50??????//定義棧的長度
#define?WW?10??????//定義語義棧的單位長度
//語義子程序的編號
#define?DEF1?16
#define?DEF2?17
#define?DEF3?18
#define?ARITH1?21
#define?ARITH2?22
#define?ARITH3?23
#define?ARITH4?24
#define?ARITH5?25
#define?ARITH6?26
//詞法分析中的常量
#define?H?14
#define?L?8
#define?W?20
#define?F?40
int?Q=1;
char?keyword[H][L];
char?simple[W];
char?dousim[W][4];
char?buffer[10];????//用于存放讀到的字符
char?buffer1[10];???//用于存放字符的返回值
char?buffer2[10];??//用于歸約時存放讀到的字符
char?ch;
int?error[L];
int?M=0;
int?LINE=0;
struct?fina
{
??char?name[10];
};
struct?labe
{
??char?name[10];
??char?att[10];
};
struct?fina?finals[F];
struct?labe?labels[F];
/******************************************************/
char?syntax[LL][WW];???//定義語義棧
char?labelss[LL][WW];???//定義符號棧
int??state[LL];???????//定義狀態棧
int?ptr=0;????????????//指向棧頂
int?p=0;??????????????//用于判斷用什么表
int?no1no2;??//用于查找狀態轉換時其所處的狀態
int?lab;?????//用于存放查表后所得的下標
char?def[7][6];//={“;““int““float““““id““#““D“};
char?arith[11][5];//={“id““=““+““*““(““)““;““#““E““T““F“};
int?def_tabel[9][7]={{0230001}????????//定義語句的SLR1表
????????????????????{4005000}
{0000600}
{0000700}
{00000-10}
{0000800}
{160016000}
{170017000}
{180018000}};
int?arith_tabel[15][11]={{10000000000}???????????????//定義算數表達式和賦值語句的SLR1表
????{02000000000}
{70006000345}
{00900080000}
{002210022220000}
{002424024240000}
{700060001145}
{002626026260000}
{0000000-1000}
{700060000125}
{700060000013}
{009001400000}
{002110021210000}
{002323023230000}
{002525025250000}};
FILE?*fin*out*out1;
void?init(){
???//初始化詞法分析中的變量
???int?i;
???strcpy(keyword[0]“int“);
???strcpy(keyword[1]“char“);
???strcpy(keyword[2]“float“);
???strcpy(keyword[3]“void“);
???strcpy(keyword[4]“const“);
???strcpy(keyword[5]“for“);
???strcpy(keyword[6]“if“);
???strcpy(keyword[7]“else“);
???strcpy(keyword[8]“then“);
???strcpy(keyword[9]“while“);
???strcpy(keyword[10]“switch“);
???strcpy(keyword[11]“break“);
???strcpy(keyword[12]“begin“);
???strcpy(keyword[13]“end“);
???strcpy(dousim[0]“/=“);
???strcpy(dousim[1]“+=“);
???strcpy(dousim[2]“-=“);
???strcpy(dousim[3]“*=“);
???strcpy(dousim[4]“%=“);
???strcpy(dousim[5]“||“);
???strcpy(dousim[6]“&&“);
???strcpy(dousim[7]“<=“);
???strcpy(dousim[8]“>=“);
???strcpy(dousim[9]“<=“);
???strcpy(dousim[10]“!=“);
???strcpy(dousim[11]“//“);
???strcpy(dousim[12]“/*“);
???simple[0]=‘+‘;
???simple[1]=‘-‘;
???simple[2]=‘*‘;
???simple[3]=‘/‘;
???simple[4]=‘(‘;
???simple[5]=‘)‘;
???simple[6]=‘[‘;
???simple[
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????26112??2009-06-23?18:47??桌面\編譯原理課程設計要求.doc
?????文件??????13093??2009-06-22?13:05??桌面\byyl.c
?????文件?????????58??2009-06-23?18:45??桌面\info.txt
?????目錄??????????0??2009-06-23?18:48??桌面
-----------?---------??----------?-----??----
????????????????39263????????????????????4
- 上一篇:回到原點的騎士游歷問題代碼
- 下一篇:sift-surf-orb通用程序
評論
共有 條評論