资源简介
西电大三下学期编译原理大作业,要求实现一个小型的编译器,包括词法分析,语法分析,语义分析,四元式
代码片段和文件信息
#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
相关资源
- 北邮-编译原理-词法分析
- C语言编译器的设计与实现.doc
- 现代编译原理-C语言描述
- tiny+编译器C++实现
- 简易学生管理系统源码 数据结构 大作
- 编译原理实验报告+代码+使用说明
- [BUPT]面向对象程序设计C++ - 平时作业
- 编译原理课程设计-C语言子集编译器
- 一个C语言编译器源码
- 数据结构大作业 停车场管理 C语言
- 可以将C语言转变为汇编的编译器
- 赋值语句翻译c语言实现四元式
- 编译原理用C++消除左递归
- LL1语义分析的C语言子集编译器
- 编译原理简易C编译器
- 实现语法分析器-编译原理
- plo编译器 c语言 含测试 以及实验报告
- 编译原理 LR分析器 c++代码
- 设计并实现TINYC语言的扫描程序TINYC
- LL(1)文法分析全过程(FIRST/FLLOW/S
- 编译原理 LR0项目集规范族的构造 L
- picc8.05编译器
- 计算机二级VC++2010学习版
- 山东大学编译原理实验源代码c++版
- C/C++语言大作业、小游戏
- 模式识别大作业K近邻算法
- C++大作业项目报告
- 2014年DSP大作业
- c语言数据结构期末大作业-家族族谱管
- 通讯录MFC程序,C++大作业
评论
共有 条评论