資源簡介
編譯原理的課程設計,語法分析器,附帶報告

代碼片段和文件信息
#include?“stdio.h“
#include?“ctype.h“
#include?“string.h“
//#include?“lex.h“
#define?BEGIN?1
#define?END?2
#define?ID?3
#define?NUM?4
#define?ADD?5
#define?SUB?6
#define?MUL?7
#define?DIV?8
#define?EQ?9
#define?SEMI?10
#define?LP?11
#define?RP?12
#define?BOUND?0
#define?OTHER?-1
FILE?*fp;
void?block();//語句串分析程序block()
void?factor();//因子分析程序factor()
void?term();//項分析程序term()
void?expression();//表達式分析程序expression()
void?statement();//語句分析程序statement()
char?TOKEN[20];
char?*reserve[2]={“begin““end“};
int?syn;
void?out(int?claschar*?value)//定義種別碼函數
{
????syn=clas;
}
int?lookup(char?*array)//判別是否是begin,end
{
????int?iptr;
????for(i=1;i<=2;i++)
????{
????ptr=strcmp(arrayreserve[i-1]);
????if(ptr==0)
????????return?i;
????}
????return?0;
}
int?scaner(FILE?*fp)//詞法分析程序
{
????char?ch;
????int?icjk;
????ch=fgetc(fp);
????while(isspace(ch))
????{
????????ch=fgetc(fp);
????}
????if(ch==EOF)
????????return;
????if(isalpha(ch))//標識符
????{
????????TOKEN[0]=ch;
????????ch=fgetc(fp);
????????i=1;
????????while(isalnum(ch))
????????{
????????????TOKEN[i]=ch;
????????????i++;
????????????ch=fgetc(fp);
????????}
????????TOKEN[i]=‘\0‘;
????????fseek(fp-11);
????????c=lookup(TOKEN);
????????if(c==0)
????????????out(IDTOKEN);
????????else
????????????out(c““);
????}
????else
????????if(isdigit(ch))//整形常數
????????{
????????????TOKEN[0]=ch;
????????????ch=fgetc(fp);
????????????i=1;
????????????while(isdigit(ch))
????????????{
????????????????TOKEN[i]=ch;
????????????????i++;
????????????????ch=fgetc(fp);
????????????}
????????????TOKEN[i]=‘\0‘;
????????????fseek(fp-11);
????????????out(NUMTOKEN);
????????}
????????else
????????{
????????????switch(ch)
????????????{
????????????????case?‘+‘:
????????????????????out(ADD““);
????????????????????break;
????????????????case?‘-‘:
????????????????????out(SUB““);
????????????????????break;
????????????????case?‘*‘:
????????????????????out(MUL““);
????????????????????break;
????????????????case?‘/‘:
????????????????????out(DIV““);
????????????????????break;
?????????????????case?‘:‘:
????????????????????ch=fgetc(fp);
????????????????????if(ch==‘=‘)
????????????????????????out(EQ““);
????????????????????else
????????????????????{
????????????????????????fseek(fp-11);
????????????????????????out(OTHER““);
????????????????????}
????????????????????break;
?????????????????case?‘;‘:
????????????????????out(SEMI““);
????????????????????break;
?????????????????case?‘(‘:
????????????????????out(LP““);
????????????????????break;
?????????????????case?‘)‘:
????????????????????out(RP““);
????????????????????break;
?????????????????case?‘#‘:
????????????????????out(BOUND““);
????????????????????break;
?????????????????default:
????????????????????out(OTHER““);
????????????????????break;
????????????}
????????}
}
void?error()//error函數:主要是輸出錯誤信息,然后退出程
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2014-03-25?21:06??語法分析器\
?????目錄???????????0??2014-03-25?20:53??語法分析器\源代碼\
?????目錄???????????0??2014-03-25?20:53??語法分析器\源代碼\Debug\
?????文件??????192609??2011-06-04?15:35??語法分析器\源代碼\Debug\ex2.exe
?????文件??????216600??2011-06-04?15:35??語法分析器\源代碼\Debug\ex2.ilk
?????文件???????13919??2011-06-04?15:35??語法分析器\源代碼\Debug\ex2.obj
?????文件??????187172??2011-06-04?13:54??語法分析器\源代碼\Debug\ex2.pch
?????文件??????476160??2011-06-04?15:35??語法分析器\源代碼\Debug\ex2.pdb
?????文件???????33792??2011-06-04?17:23??語法分析器\源代碼\Debug\vc60.idb
?????文件???????53248??2011-06-04?15:35??語法分析器\源代碼\Debug\vc60.pdb
?????文件????????5001??2011-06-04?15:35??語法分析器\源代碼\ex2.c
?????文件????????3363??2011-05-22?13:19??語法分析器\源代碼\ex2.dsp
?????文件?????????514??2011-05-22?13:19??語法分析器\源代碼\ex2.dsw
?????文件???????50176??2011-06-04?17:23??語法分析器\源代碼\ex2.ncb
?????文件????????2505??2011-06-04?14:02??語法分析器\源代碼\EX2.OBJ
?????文件???????48640??2011-06-04?17:23??語法分析器\源代碼\ex2.opt
?????文件????????1938??2011-06-04?15:35??語法分析器\源代碼\ex2.plg
?????文件??????????32??2011-06-04?15:48??語法分析器\源代碼\test.txt
?????文件??????576000??2014-03-25?20:55??語法分析器\語法分析器實驗報告.doc
評論
共有 條評論