资源简介
使用C++ 实现的布尔表达式的递归下降 得到推导过程 词法分析 以及逆波兰式
代码片段和文件信息
/*
B TB′
B′ and T B′|ε
T FT ′
T′ or FT′|ε
F not F |true|false |(B)| i rop i
*/
#include
#include
#include
int kk;
int tear=51;
int head=50;
int numberoftemp=0;
int numberofquad=0;
class quad
{
public:
char result[8];
char arg1[8];
char op[8];
char arg2[8];
void print()
{
cout< }
}q[20];
void qemit(char a[]char b[]char c[]char d[])
{
strcpy(q[numberofquad].resulta);
strcpy(q[numberofquad].arg1b);
strcpy(q[numberofquad].opc);
strcpy(q[numberofquad].arg2d);
numberofquad++;
}
char* newtemp()
{
char *p;
int temp=numberoftemp;
p=new char[8];
p[0]=‘t‘;
for(int i=0;;i++)
{
p[++i]=char(temp%10+48);
temp=temp/10;
if (temp==0) {p[i+1]=‘\0‘; break;}
}
numberoftemp++;
return p;
};
struct word
{
char w[10];
void print()
{
cout< }
}wr[200];
struct nipolan
{
word nibolan[100];
} n;
int tcount=0;
int wcount=0;
char *rwtab[9]={“true““not““false““(““)““rop““i““or““and“};
class tuidao
{
public:
char a[10];
char b[10];
char c[10];
char d[10];
void emit(char *mchar *nchar *pchar *q);
void print() {cout<“<}t[100];
void tuidao::emit(char *mchar *nchar *pchar *q)
{
strcpy(am);
strcpy(bn);
strcpy(cp);
strcpy(dq);
}
class interpreter
{
private:
ifstream SourceFile;
char buffercode[200];
int syn;
int current;
char token[8];
public:
void scaner();
void B();
void B1();
void T();
void F();
void T1();
void run();
void read();
void bolon();
void toword();
char *unit();
char *expression();
char *term();
void bolan();
void reset()
{
current=0;
};
void run1()
{
scaner();
expression();
};
};
void bolan()
{
strcpy(n.nibolan[tear].wq[0].arg1);tear++;
strcpy(n.nibolan[tear].wq[0].arg2);tear++;
strcpy(n.nibolan[tear].wq[0].op);tear++;
for(int i=0;i {
for (int j=i-1;j>=0;j--)
{
if (strcmp(q[i].arg1q[j].result)==0)
{
if (strcmp(q[i].arg2q[j+1].result)==0) {strcpy(n.nibolan[tear].wq[i].op);tear++;break;}
else
{
strcpy(n.nibolan[tear].wq[i].arg2);tear++;
strcpy(n.nibolan[tear].wq[i].op);tear++;
break;
}
}
if ((strcmp(q[i].arg1q[j].result)!=0)&&(strcmp(q[i].arg2q[j+1].result)==0))
{
strcpy(n.nibolan[tear].wq[i].op);tear++;
strcpy(n.nibolan[head].wq[i].arg1);head--;
break;
}
if ((strcmp(q[i].arg1q[j].result)!=0)&&(strcmp(q[i].arg2q[j].result)!=0))
{
strcpy(n.nibolan[tear].wq[i].arg1);tear++;
strcpy(n.nibolan[tear].wq[i].arg2);tear++;
strcpy(n.nibolan[tear].wq[i].op);tear++;
break;
}
}
}
}
void interpreter::toword()
{
current=0;
int i=0;
while (bufferco
- 上一篇:计算机图形学基础—消隐
- 下一篇:维吉尼亚加密解密C语言实现
相关资源
- 北邮-编译原理-词法分析
- 现代编译原理-C语言描述
- 编译原理实验报告+代码+使用说明
- 编译原理课程设计-C语言子集编译器
- 赋值语句翻译c语言实现四元式
- 编译原理用C++消除左递归
- 编译原理简易C编译器
- 实现语法分析器-编译原理
- 编译原理 LR分析器 c++代码
- 设计并实现TINYC语言的扫描程序TINYC
- LL(1)文法分析全过程(FIRST/FLLOW/S
- 编译原理 LR0项目集规范族的构造 L
- 山东大学编译原理实验源代码c++版
- 自编八皇后问题递归、非递归算法
- 简单函数绘图语言的解释器
- Lex和Yacc从入门到精通.pdf
- 简易词法分析器——基于C语言
- 经典的分形入门程序-Koch曲线的递归算
- LL(1)文法的实现-mfc-编译原理学习
- 词法分析代码内有报告
- 06.什么是递归.wmv目前数据结构最好的
- 编译原理LL1文法的mfc实现含消除左递
- 编译原理词法分析实验
- pl/0语言的编译器
- C++实现编译原理自动机、LL1文法、及
- 编译原理语义分析程序 c++实现
- 编译原理 课程设计 DAG 报告+源码C++版
- 编译原理课程设计----语法分析器(
- 编译原理简单的编译器源码
- C语言实现一个编译器-编译原理南开大
评论
共有 条评论