资源简介

编译原理的课程设计,语法分析器,附带报告

资源截图

代码片段和文件信息

#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

评论

共有 条评论