• 大小: 227KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-08-04
  • 语言: 其他
  • 标签:

资源简介

这学期学了编译原理,做了几个实验,现在将用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个文件信息

评论

共有 条评论

相关资源