資源簡介
這學期學了編譯原理,做了幾個實驗,現在將用SLR實現一個簡單的編譯器,希望對大家有所幫助(如有疑問或建議請發郵件到zuopengperfect@163.com)

代碼片段和文件信息
#include?
#include?
#include?
#include?“Lex.h“
#define?MAXLENGTH?1024
//定義符號表的類型
typedef?struct?Identifier_st
{
????int?Order;
????char?IdName[50];
}Identifier;
//存儲所有的符號
Identifier?IdNames[MAXLENGTH];
int?IDNUMS=0;
//判斷在沒有在符號表里面
int?IsInIDTable(char?*IdName)
{
????int?i=0;
????for(i=0;i ????{
????????if(strcmp(IdNames[i].IdNameIdName)==0)
????????????return?i;
????}
????int?temp;
????temp=IDNUMS;
????IdNames[IDNUMS].Order?=?IDNUMS;
????strcpy(IdNames[IDNUMS].IdNameIdName);
????IDNUMS++;
????return?temp;
}
//將符號表數組中的數據寫入到一個文件中
void?WriteIdTableToFile()
{
????int?i=0;
????FILE?*FileOut*FileTemp;
????FileOut=fopen(“Identifiers_Table.txt““w“);
????FileTemp=FileOut;
????char?IdName[50];
????for(i=0;i ????{
????????itoa(IdNames[i].Order?IdName?10);
????????fputs(IdNameFileOut);
????????fputs(“??“FileOut);
????????fputs(IdNames[i].IdNameFileOut);
????????fputs(“\n“FileOut);
????}
????fflush(FileTemp);
????fclose(FileTemp);
}
int?IsLetter(char?ch)
{
????if((ch>=‘a‘&&ch<=‘z‘)||(ch?>=?‘A‘?&&?ch??<=?‘Z‘))
????????return?1;
????return?0;
}
int?IsDigit(char?ch)
{
????if(ch?>=?‘0‘?&&?ch?<=?‘9‘)
????????return?1;
????return?0;
}
void?ReadLine(char?output[]FILE?*File)
{
????char?ch;
????ch?=?fgetc(File);
????int?i=0;
????while(ch?!=?‘\n‘?&&?ch?!=?EOF?)
????{
????????output[i]=ch;
????????i++;
????????ch?=?fgetc(File);
????}
}
//詞法分析器
int?MyLex(const?char?*FileName)
{
????char?temp;
????char?Num[50];
????char?IDName[50];
????//char?*SignalName;
????char?inputtemp[100];
????//定義輸入文件和輸出文件
????FILE?*FileIn*FileInTemp;
????FILE?*FileToken*FileTokenTemp;
????FILE?*FileDigit*FileDigitTemp;
????FILE?*FileID*FileIDTemp;
????//打開文件
????FileIn?=?fopen(FileName“r“);
????FileInTemp?=?FileIn;
????FileToken?=?fopen(“TokenTable.txt““w“);
????FileTokenTemp?=?FileToken;
????//打開常數文件
????FileDigit=fopen(“Digit.txt““w“);
????FileDigitTemp?=?FileDigit;
????int?DigitNum=0;
????//打開字符文件
????FileID=fopen(“ID.txt““w“);
????FileIDTemp=FileID;
????while(!feof(FileIn))
????{
????????int?i=0;
????????for(i=0;i<100;i++)
????????????inputtemp[i]=‘\0‘;
????????ReadLine(inputtempFileIn);
????????char?*input;
????????input?=?inputtemp;
????????while((temp?=?*input)!=?‘\0‘)
????????{
????????????//可能是標識符,可能是關鍵字
????????????if(IsLetter(temp))
????????????{
????????????????//先清空IDName里的字符
????????????????for(i=0;i<20;i++)
????????????????????IDName[i]=‘\0‘;
????????????????IDName[0]?=?temp;
????????????????int?k=1;
while(IsLetter(*(input+1))==1?||?IsDigit(*(input+1))==1?)
{
IDName[k]=*(input+1);
k++;
input++;
}
//printf(“%s?“IDName);
//寫到文件中
if(strcmp(IDName“if“)==0)?//判斷是不是if
{
//向Token表里面寫入數據
????????????????????fprintf(FileToken“%d?-1\n“IF);
}
else?if(strcmp(IDName“else“)==0)//判斷是不是else
{
//向Token表里面寫入數
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????146??2009-05-12?14:50??編譯原理_詞法分析_SLR語法分析_SLR語義分析\SLR\1.txt
?????文件??????18007??2009-05-29?10:27??編譯原理_詞法分析_SLR語法分析_SLR語義分析\SLR\ActionAndGoto.txt
?????文件?????708298??2009-05-29?10:28??編譯原理_詞法分析_SLR語法分析_SLR語義分析\SLR\bin\Debug\SLR.exe
?????文件?????????21??2009-05-29?10:27??編譯原理_詞法分析_SLR語法分析_SLR語義分析\SLR\Digit.txt
?????文件????????700??2009-05-29?10:27??編譯原理_詞法分析_SLR語法分析_SLR語義分析\SLR\First.txt
?????文件????????720??2009-05-29?10:27??編譯原理_詞法分析_SLR語法分析_SLR語義分析\SLR\Follow.txt
?????文件???????9795??2009-05-29?10:27??編譯原理_詞法分析_SLR語法分析_SLR語義分析\SLR\GotoFuncs.txt
?????文件?????????85??2009-05-29?10:27??編譯原理_詞法分析_SLR語法分析_SLR語義分析\SLR\ID.txt
?????文件?????????19??2009-05-29?10:27??編譯原理_詞法分析_SLR語法分析_SLR語義分析\SLR\Identifiers_Table.txt
?????文件???????9731??2009-05-29?09:57??編譯原理_詞法分析_SLR語法分析_SLR語義分析\SLR\Lex.c
?????文件???????9265??2009-05-29?08:37??編譯原理_詞法分析_SLR語法分析_SLR語義分析\SLR\Lex.cpp
?????文件???????1162??2009-05-11?20:08??編譯原理_詞法分析_SLR語法分析_SLR語義分析\SLR\Lex.h
?????文件????????396??2009-05-29?08:39??編譯原理_詞法分析_SLR語法分析_SLR語義分析\SLR\main.c
?????文件????????481??2009-05-29?08:44??編譯原理_詞法分析_SLR語法分析_SLR語義分析\SLR\main.cpp
?????文件????????293??2009-05-29?10:27??編譯原理_詞法分析_SLR語法分析_SLR語義分析\SLR\new.txt
?????文件??????14195??2009-05-29?10:28??編譯原理_詞法分析_SLR語法分析_SLR語義分析\SLR\obj\Debug\Lex.o
?????文件???????6096??2009-05-29?10:28??編譯原理_詞法分析_SLR語法分析_SLR語義分析\SLR\obj\Debug\main.o
?????文件??????32705??2009-05-29?10:28??編譯原理_詞法分析_SLR語法分析_SLR語義分析\SLR\obj\Debug\SLR.o
?????文件?????170853??2009-05-29?10:28??編譯原理_詞法分析_SLR語法分析_SLR語義分析\SLR\obj\Debug\SLR_Analyse.o
?????文件???????1101??2009-05-29?10:27??編譯原理_詞法分析_SLR語法分析_SLR語義分析\SLR\PSets.txt
?????文件??????20891??2009-05-29?08:28??編譯原理_詞法分析_SLR語法分析_SLR語義分析\SLR\SLR.c
?????文件???????1275??2009-05-29?10:43??編譯原理_詞法分析_SLR語法分析_SLR語義分析\SLR\SLR.cbp
?????文件???????1444??2009-05-29?10:23??編譯原理_詞法分析_SLR語法分析_SLR語義分析\SLR\SLR.depend
?????文件????????676??2009-05-10?19:02??編譯原理_詞法分析_SLR語法分析_SLR語義分析\SLR\SLR.h
?????文件????????749??2009-05-29?10:43??編譯原理_詞法分析_SLR語法分析_SLR語義分析\SLR\SLR.layout
?????文件????????594??2009-05-29?10:27??編譯原理_詞法分析_SLR語法分析_SLR語義分析\SLR\SLROut.txt
?????文件??????10483??2009-05-29?10:27??編譯原理_詞法分析_SLR語法分析_SLR語義分析\SLR\SLR_Analyse.cpp
?????文件????????123??2009-05-29?06:40??編譯原理_詞法分析_SLR語法分析_SLR語義分析\SLR\SLR_Analyse.h
?????文件????????164??2009-05-29?10:27??編譯原理_詞法分析_SLR語法分析_SLR語義分析\SLR\SLR_Analyse.txt
?????文件??????10557??2009-05-29?10:27??編譯原理_詞法分析_SLR語法分析_SLR語義分析\SLR\StateSets.txt
............此處省略11個文件信息
- 上一篇:浙江大學計算理論考試試卷
- 下一篇:中科大算法導論期末試卷及答案
評論
共有 條評論