预测分析算法的设计与实现.docVIP

  • 23
  • 0
  • 约1.27万字
  • 约 24页
  • 2016-11-28 发布于重庆
  • 举报
预测分析算法的设计与实现

预测分析算法的设计与实现 程序代码: #include stdio.h #include stdlib.h #define MaxRuleNum 8 #define MaxVnNum 5 #define MaxVtNum 5 #define MaxStackDepth 20 #define MaxPLength 20 #define MaxStLength 50 struct pRNode /*产生式右部结构*/ { int rCursor; struct pRNode *next; }; struct pNode { int lCursor; int rLength; /*右部长度*/ struct pRNode *rHead; /*右部结点头指针*/ }; char Vn[MaxVnNum + 1]; /*非终结符集*/ int vnNum; char Vt[MaxVtNum + 1]; /*终结符集*/ int vtNum; struct pNode P[MaxRuleNum]; int PNum; char buffer[MaxPLength + 1]; char ch; char st[MaxStLength]; /*要分析的符号串*/ struct collectNode { int nVt; void ShowAT();/*输出分析表*/ void Identify(char *st); void InitStack(); void ShowStack(); void Pop(); void Push(int r); int main() { char todo,ch; Init(); InputVn(); InputVt(); InputP(); getchar(); FirstFollow(); printf(所得first集为:); ShowCollect(first); printf(所得follow集为:); ShowCollect(follow); CreateAT(); ShowAT(); todo = y; while(y == todo) { printf(\n是否继续进行句型分析?(y / n):); todo = getchar(); while(y != todo n != todo) { printf(\n(y / n)? ); todo = getchar(); } if(y == todo) { int i; InitStack(); printf(请输入符号串(以#结束) : ); ch = getchar(); i = 0; while(# != ch i MaxStLength) { st[i] = ch; Identify(st); } else printf(输入出错!\n); } } getchar(); } void Init() { int i,j; vnNum = 0; vtNum = 0; PNum = 0; for(i = 0; i = MaxVnNum; i++) Vn[i] = \0; for(i = 0; i = MaxVtNum; i++) Vt[i] = \0; for(i = 0; i MaxRuleNum; i++) { P[i].lCursor = NULL; P[i].rHead = NULL; P[i].rLength = 0; } PNum = 0; for(i = 0; i = MaxPLength; i++) } } int IndexCh(char ch) { int n; n = 0; /*is Vn?*/ while(ch != Vn[n] \0 != Vn[n]) n++; if(\0 != Vn[n]) return 100 + n; n = 0; /*is Vt?*/ while(ch != Vt[n] \0 != Vt[n]) n++; if(\0 != Vt[n]) return n; return -1; } /*输出Vn或Vt的内容*/ void ShowChArray(char* collect) { int k = 0; while(\0 != collect[k]) { printf( %c , collect[k++]); } printf(\n); } /*输入非终结符*/

文档评论(0)

1亿VIP精品文档

相关文档