资源简介
DO-WHILE循环语句的翻译程序设计(简单优先法、输出三地址表示)
代码片段和文件信息
#include“Stack.h“
#include
#include
#include
using namespace std;
#define norw 13 //关键字的个数
#define nmax 14 //数字的最大位数
#define al 10 //符号的最大长度
#define N -10
#define getchdo if(getch()==-1)return -1
#define getsymdo if(getsym()==-1)return -1
ifstream *fin;
SeqStack SymOptOpr;
char *pch;
char str[20];
char inputstr[100]; //保存从文件读入的所有字符
char buf[5][20];
int count1=0count2=0;
int ip=0rowline;
enum symbol sym; //当前的符号
int num; //当前number
char a[al+1]; //临时符号
char id[al+1]; //当前ident
char word[norw][al]; //保留字
enum symbol wsym[norw]; //关键字的符号值
enum symbol ssym[256]; //单字符的符号值
enum symbol{
nul ident number plus minus times
slash oddsym eql neq lss leq
gtr geq lparen rparen lbrace rbrace
comma semicolon period becomes beginsym endsym
ifsym elsesym whilesym writesym readsym dosym
callsym constsym varsym procsym
};
void ThreeAddr();
void init()
{
//设置单字符符号
for(int i=0;i<=255;i++)
{
ssym[i]=nul;
}
ssym[‘+‘]=plus;
ssym[‘-‘]=minus;
ssym[‘*‘]=times;
ssym[‘/‘]=slash;
ssym[‘(‘]=lparen;
ssym[‘)‘]=rparen;
ssym[‘{‘]=lbrace;
ssym[‘}‘]=rbrace;
ssym[‘=‘]=eql;
ssym[‘‘]=comma;
ssym[‘.‘]=period;
ssym[‘#‘]=neq;
ssym[‘;‘]=semicolon;
//设置保留字名字,
strcpy(&(word[0][0])“begin“);
strcpy(&(word[1][0])“call“);
strcpy(&(word[2][0])“const“);
strcpy(&(word[3][0])“do“);
strcpy(&(word[4][0])“end“);
strcpy(&(word[5][0])“if“);
strcpy(&(word[6][0])“odd“);
strcpy(&(word[7][0])“procedure“);
strcpy(&(word[8][0])“read“);
strcpy(&(word[9][0])“then“);
strcpy(&(word[10][0])“var“);
strcpy(&(word[11][0])“while“);
strcpy(&(word[12][0])“write“);
//设置保留字符号
wsym[0]=beginsym;
wsym[1]=callsym;
wsym[2]=constsym;
wsym[3]=dosym;
wsym[4]=endsym;
wsym[5]=ifsym;
wsym[6]=oddsym;
wsym[7]=procsym;
wsym[8]=readsym;
wsym[9]=elsesym;
wsym[10]=varsym;
wsym[11]=whilesym;
wsym[12]=writesym;
}
char rule[12][20]={
“S->do{B}while(E)\0“
“B->d=C;\0“
“C->A+A\0“
“C->A-A\0“
“C->A*A\0“
“C->A/A\0“
“C->A\0“
“E->A>A\0“
“E->A “E->A==A\0“
“E->A\0“
“A->d\0“}; //文法
int getch()
{
if(fin->get(ch))
{
if(ch!=‘ ‘ && ch!=9 && ch!=10)
{
inputstr[ip]=ch;
ip++;
}
cout< return 0;
}
else return -1;
}
//词法分析
int getsym()
{
int ijk;
while(ch==‘ ‘||ch==10||ch==9)
{
getchdo;
sym=nul;
}
if(ch>=‘a‘&&ch<=‘z‘)
{
k=0;
do{
if(k {
a[k]=ch;
k++;
}
getchdo;
}while(ch>=‘a‘&&ch<=‘z‘||ch>=‘0‘&&ch<=‘9‘);
a[k]=0;
strcpy(ida);
i=0;
j=norw-1;
do{ //搜索当前符号是否为保留字
k=(i+j)/2;
if(strcmp(idword[k])<=0)
{
j=k-1;
}
if(strcmp(idword[k])>=0)
{
i=k
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4353 2010-01-06 19:03 compile\compile.dsp
文件 537 2010-01-06 08:26 compile\compile.dsw
文件 50176 2010-01-10 19:55 compile\compile.ncb
文件 53760 2010-01-10 19:55 compile\compile.opt
文件 248 2010-01-10 19:55 compile\compile.plg
文件 577600 2010-01-10 19:55 compile\Debug\compile.exe
文件 817496 2010-01-10 19:55 compile\Debug\compile.ilk
文件 2165296 2010-01-07 11:01 compile\Debug\compile.pch
文件 1131520 2010-01-10 19:55 compile\Debug\compile.pdb
文件 305585 2010-01-10 19:55 compile\Debug\do-while.obj
文件 91136 2010-01-10 19:55 compile\Debug\vc60.idb
文件 135168 2010-01-10 19:55 compile\Debug\vc60.pdb
文件 11489 2010-01-10 19:56 compile\do-while.cpp
文件 29 2010-01-10 19:54 compile\simple.txt
文件 1140 2010-01-07 10:59 compile\Stack.h
目录 0 2010-01-10 18:35 compile\Debug
目录 0 2010-01-10 19:56 compile
----------- --------- ---------- ----- ----
5345533 17
- 上一篇:基于STM32的温湿度检测系统实现
- 下一篇:cocos2d-x飞机大战项目
相关资源
- FOR循环语句的翻译程序设计简单优先
- 编译原理课程设计 while do循环语句翻
- 编译原理课程设计do——while简单优先
- 输出三角波 锯齿波 方波 正弦波
- DO-WHILE循环语句的翻译程序设计LL1法、
- IF-ELSE条件语句的翻译程序设计LR方法
- IF-ELSE条件语句的翻译程序设计LL1法、
- IF-ELSE条件语句翻译简单优先法、输出
- FOR语句简单优先法四元式
- DO-WHILE简单优先法输出三地址
- IF-ELSE条件语句的翻译程序设计递归下
- IF-ELSE条件语句的翻译程序设计简单优
- MSP430g2553单片机实现的输出三路PWM,
- TLC5615C+输出三角波+仿真.zip
- DO-WHILE循环语句的翻译程序设计(简单
- WHILE循环语句的翻译程序设计LL1法、输
- IF-ELSE条件语句的翻译程序设计递归下
- FOR循环语句的翻译LR,输出三地址
- WHILE循环语句的翻译程序设计(简单优
- IF-ELSE条件语句的翻译程序设计简单优
- WHILE循环语句的翻译程序设计递归下降
- IF-ELSE条件语句的翻译程序设计(LL(
评论
共有 条评论