资源简介
完成一个相对完整的编译器,该编译完成对变量类型(整数/浮点数)定义、赋值、四则运算、逻辑运算、跳转与循环控制功能。其输入是源程序(参见“一个四则运算源程序示例”),输出是所有变量的最终值。
代码片段和文件信息
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
#include
using namespace std;
#define MAX 100
char inputstream[50]; //存储输入句子
int temp1=0; //数组下标
int right1; //判断输出信息
int m2=0sum2=0;//sum用于计算运算符的个数
//m用于标记输入表达式中字符的个数
char JG=‘A‘;
char str[MAX];//用于存输入表达式
int tokene=0;//左括号的标志
char prog1[80]token1[8]ch1;
int syn1p1m1n1sum1;
char *rwtab1[6]={“begin““if““then““while““do““end“};
int r1 ;
char prog[80]; //存放所有输入字符
char token[8]; //存放词组
char ch; //单个字符
int synpmni; //syn:种别编码
double sum;
int count;
int isSignal; //是否带正负号(0不带,1负号,2正号)
int isError;
int isDecimal; //是否是小数
double decimal; //小数
int isExp; //是否是指数
int index; //指数幂
int isNegative; //是否带负号
double temp;
int temp2;
int repeat; //是否连续出现+-
int nextq;
int kk; //临时变量的标号
int ntcnfcnncnnbnna;
char *rwtab[9]={“main““int““float““double““char““if““else““do““while“};
struct{
char result[10]; //字符串(字符数组)
char arg1[10];
char opera[10];
char arg2[10];
}fourCom[20]; //结构体数组
void cifafenxi();
void yufafenxi();
void zhongjiandaima();
void scaner1();
void e();
void e1();
void t();
void t1();
void f();
void lrparser();
void staBlock(int *nChain); //语句块
void staString(int *nChain); //语句串
void sta(int *nChain); //语句
void fuzhi(); //赋值语句
void tiaojian(int *nChain); //条件语句
void xunhuan(); //循环语句
char* E(); //Expresiion表达式
char* T(); //Term项
char* F(); //Factor因子
char *newTemp(); //自动生成临时变量
void backpatch(int pint t); //回填
int merge(int p1int p2); //合并p1和p2
void emit(char *reschar *num1char *opchar *num2); //生成四元式
void scanner(); //扫描
void lrparser()
{
int nChain;
nfc=ntc=1;
nextq=1;
if(syn==1) //main
{
scanner();
if(syn==26) //(
{
scanner();
if(syn==27) //)
{
scanner();
staBlock(&nChain);
}
else
printf(“缺少右括号\n“);
}
else
printf(“缺少左括号\n“);
}
else
printf(“缺少main\n“);
}
//<语句块> ::= ‘{‘<语句串>‘}‘
void staBlock(int *nChain) //语句块
{
if(syn==28) //{
{
scanner();
staString(nChain);
//backpatch(*nChainnextq);
if(syn==29) //}
scanner(); //读下一个
else
printf(“缺少}号\n“);
}
else
printf(“缺少{号\n“);
}
//<语句串>::=<语句>{;<语句>};
void staString(int *nChain) //语句串
{
sta(nChain);
backpatch(*nChainnextq);
while(syn==31) //;
{
scanner();
sta(nChain);
}
//backpatch(*nChainnextq-1);
}
void sta(int *nChain) //语句
{
if(syn==10)
{
fuzhi();
//*nChain=0;
}
else if(syn==6) //if
{
tiaojian(nChain);
}
else if(syn==8) //do
xunhuan();
}
//<条件语句>->if(<条件>)<语句块>
void tiaojian(int *nChain)
{
char res[10]num1[10]num2[10]op[10];
int nChainTemp;
//<条件>-><表达式><关系运算符><表达式>
if(syn==6) //if
{
scanner();
//strcpy(num1E());
if(syn==26) //(
{
scanner();
strcpy(num1E());
if((syn<=37)&&(syn>=32))
{
switch(syn)
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-03-07 15:45 实验三:编译器\
文件 17960 2017-04-19 12:55 实验三:编译器\1.cpp
目录 0 2018-03-07 15:30 实验三:编译器\OK\
文件 13675 2017-04-19 15:00 实验三:编译器\OK\okok.cpp
文件 11873 2017-04-19 12:39 实验三:编译器\OK\简单版OK.cpp
文件 11873 2017-04-19 12:39 实验三:编译器\OK.cpp
文件 247808 2017-04-19 00:07 实验三:编译器\编译原理-简单编译器课程设计报告.doc
文件 361441 2017-04-18 23:53 实验三:编译器\编译原理课程设计----C语言编译器的实现.doc
文件 130048 2018-03-07 15:44 实验三:编译器\编译器.doc
相关资源
- mpu9250驱动C语言源码 磁力计校准算法
- 马踏棋盘C语言源代码
- matlab2016b配置VS2017编译器mexopts补丁文
- 宿舍管理系统C语言源代码与可执行文
- 数据结构 哈夫曼树C语言源代码
- PL/0编译程序文本(C版本)
- 赫夫曼树的构建及赫夫曼编码C语言源
- 模拟退火算法含有C语言源代码
- 修改VB6的编译器C2.exe使它可以输出汇
- c 编译器 masm32 汇编 可自举
- 红外避障小车程序C语言源码.rar
- 51单片机DIY制作:旋转LED数字显示电子
- 编译原理 压缩文法等价变换
- 178个经典C语言源代码
- 远程仓库湿度监测系统设计-Proteus仿真
- matlab2016b vs2017编译器补丁文件
- 编译原理 电梯程序
- 编译原理C++实现判断LL1文法
- p2p技术C语言源码
- 编译原理课程设计——目标代码生成
- 基于51单片机的12864液晶显示C语言源程
- 上传的p2p技术C语言源码
- spath(A*算法的C语言源代码)
- 实序列快速傅里叶变换C语言源代码
- 编译原理课程设计(PASCAL)
- HMM隐马尔可夫模式的经典学习C语言源
- pl/0编译器源码及文档
- SHA1算法C语言源代码
- 遗传算法求解TSP旅行商问题C语言源代
- c语言源代码,文本编辑器
评论
共有 条评论