




如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
(二)DO-WHILE循环语句的翻译程序设计(简单优先法、输出四元式) 一、1.简单优先法的基本思想 根据优先关系的定义,将简单优先文法中各文法符号之间的这种关系用一个矩阵表示,称作简单优先矩阵。PDA读入一个单词后,比较栈顶符号和该单词的优先级,若栈顶符号优先级低于该单词,继续读入;若栈顶符号优先级高于或等于读入符号,则找句柄进行归约,找不到句柄就继续读入。直到最后栈内只剩下开始符号,输入串读到“#”为止。此时识别正确。可分点描述如下: (1)、对句型中相邻的文法符号规定优先关系,以寻找句型中的句柄; (2)、规定句柄内各相邻符号之间具有相同的优先级; (3)、规定句柄两端符号优先级要比位于句柄之外而又和句柄相邻的符号的优先级高,以先归约句柄; (4)、对于文法中所有符号,只要它们可能在某个句型中相邻,就要为它们规定相应的优先关系,若某两个符号永远不可能相邻,则它们之间就无关系. 2.简单优先矩阵 用于表示文法符号之间的简单优先关系的矩阵。 3.简单优先法的优缺点 优点:技术简单,当做简单优先矩阵是要求较短。 缺点:适用范围小,分析表尺寸太大。 二、源代码实现: #include<iostream> #defineMAX35 #include<list> #include<string> #include<fstream> usingnamespacestd; #define TABLE_LEN 8 #define STR_LEN 256 intzhlen; charsTable[TABLE_LEN+1]={"+-*/()i#"};//顺序索引 intShipTable[TABLE_LEN][TABLE_LEN]=//优先表 { {1,1,-1,-1,-1,1,-1,1}, {1,1,-1,-1,-1,1,-1,1}, {1,1,1,1,-1,1,-1,1}, {1,1,1,1,-1,1,-1,1}, {-1,-1,-1,-1,-1,0,-1,-2}, {1,1,1,1,-2,1,-2,1}, {1,1,1,1,-2,1,-2,1}, {-1,-1,-1,-1,-1,-2,-1,0} }; charX,a; charVN[11]={'K','L','P','S','E','G','T','R','F','Q','\0'}; charVT[15]={'i','=','<','>','+','-','*','/','(',')','d','w',';','#','\0'}; charp[18][6]={"dLwS\0","SP\0",";SP\0","\0","iQE\0","TG\0","+TG\0","-TG\0","\0","FR\0", "*FR\0","/FR\0","\0","(E)\0","i\0","=\0","<\0",">\0"}; charstack[MAX]; charqueue[MAX]; intsp,front; intM[10][14]={{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,-1,-1,-1},{1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,2,-1},{4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}, {5,-1,-1,-1,-1,-1,-1,-1,5,-1,-1,-1,-1,-1},{-1,-1,-1,-1,6,7,-1,-1,-1,-1,-1,8,8,8},{9,-1,-1,-1,-1,-1,-1,-1,9,-1,-1,-1,-1,-1},{-1,-1,-1,-1,12,12,10,11,-1,-1,-1,12,12,12}, {14,-1,-1,-1,-1,-1,-1,-1,13,-1,-1,-1,-1,-1},{-1,15,16,17,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}, }; intf=0;intcount=0;intc=0;chararr_i[MAX];charvar[MAX];//表格管理inttd[MAX];intt=0; intopd=-1;intopr=-1;intid=0;intd=0; chararr[MAX][4];//存放待输出的四元式 //charkeyword[2][7]={"do\0","while\0"}; boolIsCharInStr(charc,chars[]) { for(inti=0;s[i]!='\0';i++) { if(s[i]==c) returntrue; } returnfalse;

王子****青蛙
实名认证
内容提供者


最近下载