资源简介

西电大三下学期编译原理大作业,要求实现一个小型的编译器,包括词法分析,语法分析,语义分析,四元式

资源截图

代码片段和文件信息

#include “stdlib.h“
#include “string.h“
#include “stdio.h“

#define ACC -2
#define syl_if    0  //保留字 if
#define syl_else  1
#define syl_while 2
#define syl_begin 3
#define syl_end   4
#define a         5
#define semicolon 6
#define e         7
#define jinghao   8
#define s         9
#define L        10
#define tempsy   11
#define EA       12
#define EO       13
#define plus     14
#define times    15
#define becomes  16
#define op_and   17
#define op_or    18
#define op_not   19
#define rop      20
#define lparent  21
#define rparent  22
#define ident    23  //变量
#define intconst 24

/*****************数据结构说明********************/

char   ch=‘\0‘;  /*从字符缓冲区中读取当前字符*/
int    count=0;  /*词法分析结果缓冲区计数器*/
static char spelling[10]={“ “};  /*存放识别的字*/
static char line[81]={“ “};  /*一行字符缓冲区( 最多 80 个字符)*/
char   *pline;  /*字符缓冲区指针*/
static char ntab1[100][10];  /*变量名表:共100项,每项长度为10*/

struct ntab
       {
 int tc;  /*真值*/
 int fc;  /*假值*/
       }ntab2[200];  /*在布尔表达式 ) 中保存有关布尔变量的真、假值*/
int    label=0;  /*指向 ntab2 的指针*/
struct rewords
       {
 char sp[10];
 int  sy;
       };   /*匹配表的结构,用来与输入缓冲区中的单词进行匹配*/

struct rewords rewords[8]=
      {{“if“syl_if}
       {“else“syl_else}
       {“while“syl_while}
       {“{“syl_begin}
       {“}“syl_end}
       {“&&“op_and}
       {“||“op_or}
       {“!“op_not}};  /*匹配表初始化,大小为8*/

struct aa{
 int syl;  /*存放名字*/
 int pos;  /*存放名字所对应的地址*/
       }buf[100]  /*词法分析结果缓冲区*/
       n  /*读取二元式的当前字符*/
       n1  /*当前表达式中的字符*/
       E  /*非终结符*/
       sstack[100]   /*算术或布尔表达式加工处理使用的符号栈*/
       ibuf[100]  /*算术或布尔表达式使用的缓冲区*/
       stack[1000];  /*语法分析加工处理使用的符号栈*/
struct aa oth;  /*四元式中空白位置*/
struct fourexp
       {
 char op[10];
 struct aa arg1;
 struct aa arg2;
 int    result;
       }fexp[200]; /*四元式的结构定义*/
int    ssp=0;  /*指向sstack栈指针*/
struct aa *pbuf=buf;  /*指向词法分析缓冲区的指针*/
int    nlength=0;  /*词法分析中记录单词的长度*/
int    tt1=0;  /*变量名表指针*/
FILE   *cfile;  /*源程序文件,~为结束符*/
int    lnum=0;  /*源程序行数记数*/
int    sign=0;  /*sign=0为赋值语句;sign=1 为while语句;sign=3为if语句*/
int    newt=0;  /*临时变量计数器*/
int    nxq=100;  /* nxq 总是指向下一个将要形成的四元式地址,每次执行gen()时,地址自动增1*/
int    lr;  /*扫描LR分析表1过程中保存的当前状态值*/
int    lr1;  /*扫描LR分析表2或表3所保存的当前状态值*/
int    sp=0;  /*查找LR分析表时状态栈的栈顶指针*/
int    stack1[100];  /*状态栈1定义*/
int    sp1=0;  /*状态栈1的栈顶指针*/
int    num=0;  /*算术或布尔表达式缓冲区指针*/
struct ll
       {
 int nxq1;  /*记录下一条四元式的地址*/
 int tc1;  /*真值链*/
 int fc1;  /*假值链*/
       }labelmark[10];  /*记录语句嵌套层次的数组,即记录嵌套中每层的布尔表达式e的首地址*/
int    labeltemp[10];  /*记录语句嵌套层次的数组,即记录每一层else之前的四元式地址*/
int    pointmark=-1;  /*labelmark数组指针*/
int    pointtemp=-1;  /*labeltemp数组指针*/
int    g=0;
//程序语句的LR分析表
static int action[20][11]=
/* 0 */{{   2 -1  3  4 -1  5 -1 -1 -1  1 -1}
/* 1 */ {  -1 -1 -1 -1 -1 -1 -1 -1ACC -1 -1}
/* 2 */ {  -1 -1 -1 -1 -1 -1 -1  6 -1 -1 -1}
/* 3 */ {  -1 -1 -1 -1 -1 -1 -1  7 -1 -1

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      46428  2012-06-15 00:07  编译器\Debug\longyueping.obj

     文件      33792  2012-06-15 00:07  编译器\Debug\vc60.idb

     文件      53248  2012-06-13 22:21  编译器\Debug\vc60.pdb

     文件     196672  2012-06-15 00:07  编译器\Debug\编译器.exe

     文件     200508  2012-06-15 00:07  编译器\Debug\编译器.ilk

     文件     227148  2012-06-13 22:21  编译器\Debug\编译器.pch

     文件     476160  2012-06-13 22:21  编译器\Debug\编译器.pdb

     文件         54  2012-06-07 11:06  编译器\long.txt

     文件      20895  2012-06-07 11:06  编译器\longyueping.cpp

     文件         83  2004-07-07 12:08  编译器\lyp.txt

     文件      67584  2012-06-13 21:59  编译器\编译原理作业上机报告.wps

     文件       4289  2012-05-27 21:50  编译器\编译器.dsp

     文件        520  2012-05-27 21:45  编译器\编译器.dsw

     文件      54784  2012-06-15 00:08  编译器\编译器.opt

     文件        858  2012-06-15 00:07  编译器\编译器.plg

     目录          0  2012-06-13 22:21  编译器\Debug

     目录          0  2012-06-15 00:08  编译器

     文件      50176  2012-06-15 00:08  编译器\编译器.ncb

     文件          0  2012-06-07 11:28  编译器\Debug\longyueping.sbr

     文件      58368  2012-06-07 11:28  编译器\Debug\编译器.bsc

----------- ---------  ---------- -----  ----

              1491567                    20


评论

共有 条评论