资源简介
完成一个相对完整的编译器,该编译完成对变量类型(整数/浮点数)定义、赋值、四则运算、逻辑运算、跳转与循环控制功能。其输入是源程序(参见“一个四则运算源程序示例”),输出是所有变量的最终值。

代码片段和文件信息
#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
相关资源
- 单片机c语言源程序(51定时器 八个按
- 编译原理c语言编译器
- 编译原理实验-词法分析(c语言代码)
- 北邮-编译原理-词法分析
- C语言编译器的设计与实现.doc
- 现代编译原理-C语言描述
- AVR单片机SPI通讯程序 (C语言源代码)
- tiny+编译器C++实现
- 编译原理实验报告+代码+使用说明
- AES-128-CBC算法C语言源码已经修改,可
- 正则表达式(regex)C语言源码,超强
- 编译原理课程设计-C语言子集编译器
- 一个C语言编译器源码
- 可以将C语言转变为汇编的编译器
- 人员管理系统 c语言源码 课程设计专
- 赋值语句翻译c语言实现四元式
- 编译原理用C++消除左递归
- LL1语义分析的C语言子集编译器
- 编译原理简易C编译器
- 实现语法分析器-编译原理
- plo编译器 c语言 含测试 以及实验报告
- 编译原理 LR分析器 c++代码
- 设计并实现TINYC语言的扫描程序TINYC
- 树莓派智能小车开发C语言源码
- LL(1)文法分析全过程(FIRST/FLLOW/S
- 编译原理 LR0项目集规范族的构造 L
- picc8.05编译器
- 现代优化设计黄金分割法和二次插值
- 计算机二级VC++2010学习版
- 山东大学编译原理实验源代码c++版
评论
共有 条评论