资源简介
这学期学了编译原理,做了几个实验,现在将用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个文件信息
- 上一篇:浙江大学计算理论考试试卷
- 下一篇:中科大算法导论期末试卷及答案
评论
共有 条评论