当前位置:首页 >> 计算机软件及应用 >>

LL(1) 语法分析实验源程序


LL(1) 语法分析实验源程序
#include"iostream.h" #include "stdio.h" #include "malloc.h" #include "conio.h" struct Lchar{ char char_ch; struct Lchar *next; }Lchar,*p,*h,*temp,*top,*base; char curchar; char curtocmp; int right; int table[5][8]={{1,0,0,1,0,0}, {0,1,0,0,1,1}, {1,0,0,1,0,0}, {0,1,1,0,1,1}, {1,0,0,1,0,0}}; int i,j; void push(char pchar) { temp=(struct Lchar*)malloc(sizeof(Lchar)); temp->char_ch=pchar; temp->next=top;

top=temp; } void pop(void) { curtocmp=top->char_ch; if(top->char_ch!='#') top=top->next; } void doforpush(int t) { switch(t) { case 0:push('A');push('T');break; case 5:push('A');push('T');break; case 11:push('A');push('T');push('+');break; case 20:push('B');push('F');break; case 23:push('B');push('F');break; case 32:push('B');push('F');push('*');break; case 40:push('i');break; case 43:push(')');push('E');push('('); } } void changchartoint() {

switch(curtocmp) { case 'A':i=1;break; case 'B':i=3;break; case 'E':i=0;break; case 'T':i=2;break; case 'F':i=4; } switch(curchar) { case 'i':j=0;break; case '+':j=1;break; case '*':j=2;break; case '(':j=3;break; case ')':j=4;break; case '#':j=5; } } void dosome(void) { int t; for(;;) { pop();

curchar=h->char_ch; printf("\n%c\t%c",curchar,curtocmp); if(curtocmp=='#' && curchar=='#') break; if(curtocmp=='A'||curtocmp=='B'||curtocmp=='E'||curtocmp=='T'||curtoc mp=='F') { if(curtocmp!='#') { changchartoint(); if(table[i][j]) { t=10*i+j; doforpush(t); continue; } else { right=0; break; } } else if(curtocmp!=curchar)

{ right=0; break; } else break; } else if(curtocmp!=curchar) { right=0; break; } else { h=h->next; continue; } } }

void main(void) { char ch;

cout<<"* 文件名称: 语法分析"<<endl; cout<<" "<<endl;

cout<<"/* 程序相关说明 */"<<endl;

cout<<"--------------------------------------------------------------------"<<endl; cout<<"-/* A=E’ B=T’ */"<<endl; cout<<"-* 目 的: 对输入 LL(1)文法字符串,本程序能自动判断所给字 符串是 -"<<endl; cout<<"-* 程。 否为所给文法的句子,并能给出分析过 -"<<endl;

cout<<"-*------------------------------------------------------------------"<<endl; cout<<"表达式文法为:"<<endl; cout<<" cout<<" cout<<" E->E+T|T"<<endl; T->T*F|F"<<endl; F->(E)|i"<<endl;

cout<<"请在下行输入要分析的串(#号结束):"<<endl;

right=1; base=(struct Lchar*)malloc(sizeof(Lchar)); base->next=NULL; base->char_ch='#'; temp=(struct Lchar*)malloc(sizeof(Lchar));

temp->next=base; temp->char_ch='E'; top=temp; h=(struct Lchar*)malloc(sizeof(Lchar)); h->next=NULL; p=h; do{ ch=getch(); putch(ch); if(ch=='i'||ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='('||ch==')'||ch= ='#') { temp=(struct Lchar*)malloc(sizeof(Lchar)); temp->next=NULL; temp->char_ch=ch; h->next=temp; h=h->next; } else { temp=p->next; printf("\nInput a wrong char!Input again:\n"); for(;;) {

if (temp!=NULL) printf("%c",temp->char_ch); else break; temp=temp->next; } } }while(ch!='#'); p=p->next; h=p; dosome(); if(right) printf("\n 成功!\n"); else printf("\n 错误!\n"); getch(); }


赞助商链接
相关文章:
计算_LL(1)分析法实验报告
调试一个典型的语法分析程序,实现对词法分析程序所提供的单词序列 进行语法检查...三、实验过程记录:(1)写出程序 /*LL(1)分析法源程序,只能在 VC++中运行 ...
编译原理LL(1)语法分析实验报告
实验日期 2013.04.08 实【实验名称】 【实验目的】 验 报 告 LL(1)语法分析 通过完成预测分析法的语法分析程序,了解预测分析法和递归子程序法的区别和联系。 ...
LL1语法分析实验报告
LL(1)语法分析一, 实验名称: 实现 LL 分析。 二, 实验要求: 输入任意文法 ...(源程序) , 同时采用最左推导,且对每次直接推导只需向前看一个输入符 号,便...
滑动交通大学编译原理LL(1)语法分析实验报告
实验日期 2013.04.08 实【实验名称】 【实验目的】 验 报 告 LL(1)语法分析 通过完成预测分析法的语法分析程序,了解预测分析法和递归子程序法的区别和联系。 ...
LL(1)语法分析器 北邮 编译原理 实验
LL(1)语法分析器 北邮 编译原理 实验 北邮计科编译原理实验~北邮计科编译原理...{ return i; } } } /** * Description: 语法分析程序 * Arguments: *...
编译原理LL(1)语法分析实验报告
编译原理LL(1)语法分析实验报告_IT/计算机_专业资料。编译原理实验报告学号...(E)|i# ) 【流程图 流程图】 流程图 1 【源代码 源代码源代码 #...
LL(1)语法分析程序实验报告
LL(1)语法分析程序实验报告_工学_高等教育_教育专区。1.设计要求(1)对输入文法...是 是 LL(1)文法? 是 判断句型 报错 结束 4.源程序 /***/ #include<s...
LL(1)语法分析器
硬件 windows 系统环境中 【实验分析】 读入文法,判断正误,如无误,判断是否是 LL(1)文法,若是构造分析表 【实验程序】 package llyufa; public class Accept2 ...
实验5 LL(1)语法分析程序的设计与实现(C语言)_图文
实验5 LL(1)语法分析程序的设计与实现(C语言)_计算机软件及应用_IT/计算机_...(E) ?ε ?ε ?ε ?i 2、设计 LL(1)文法判别程序设计,源代码如下: /*...
实验四 LL(1)语法分析程序的设计与实现(C语言)
实验LL(1)语法分析程序的设计与实现(C语言)_IT/计算机_专业资料。班级: ...方法和步骤; 2. 阅读参考代码,对源代码进行改造,使之能解决指定的文法识别过程...
更多相关标签: