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

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)语法分析实验报告
实验日期 2013.04.08 实【实验名称】 【实验目的】 验 报 告 LL(1)语法分析 通过完成预测分析法的语法分析程序,了解预测分析法和递归子程序法的区别和联系。 ...
编译原理实验二语法分析器LL(1)实现
编译原理实验语法分析LL(1)实现_工学_高等教育_教育专区。编译原理程序设计...("请将源文件置于以下位置并按以下方式命名:F:\\2.txt\n"); if((fp=...
实验5 LL(1)语法分析程序的设计与实现(C语言)_图文
实验5 LL(1)语法分析程序的设计与实现(C语言)_计算机软件及应用_IT/计算机_...(E) ?ε ?ε ?ε ?i 2、设计 LL(1)文法判别程序设计,源代码如下: /*...
实验四 LL(1)语法分析程序的设计与实现(C语言)
实验LL(1)语法分析程序的设计与实现(C语言)_IT/计算机_专业资料。班级: ...方法和步骤; 2. 阅读参考代码,对源代码进行改造,使之能解决指定的文法识别过程...
LL(1)语法分析程序实验报告
LL(1)语法分析程序实验报告 - 《编译原理》 上机实验报告 1.设计要求 (1)对输入文法,它能判断是否为 LL(1)文法,若是,则转(2) ;否则报错并 终止; (2)...
编译原理_LL(1)文法源代码(实验三)
编译原理_LL(1)文法源代码(实验三)_数学_自然科学_专业资料。一、实验目的及要求 1.掌握 LL(1)分析法的基本原理; 2.掌握 LL(1)分析表的构造方法; 3.用 ...
编译原理实验报告——词法分析器和LL(1)文法
编译原理实验报告——词法分析器和LL(1)文法 - 《编译原理》综合性 实验报告 实验学期 专业 2016 至 2017 班级 学年 第 1 学期 计算机科学与技术 黄世...
LL(1)语法分析程序实验报告
LL(1)语法分析程序实验报告_工学_高等教育_教育专区。1.设计要求(1)对输入文法...是 是 LL(1)文法? 是 判断句型 报错 结束 4.源程序 /***/ #include<s...
LL(1)语法分析程序实验报告
LL(1)语法分析程序实验报告实验目的与要求:通过设计、编写和调试构造 First 集合、Follow 集合和 LL(1)预测分析表,利用 LL(1) 预测分析表来分析给定的符号串的...
实验三 LL(1)语法分析程序的构造
LL(1)语法分析器的构造 实验目的 1 掌握 LL(1)分析法的基本原理 2 掌握 ...(1)语法分析;其它的栈是为了在语法分析的过程中同时生成与源 程序结构对应的...
更多相关标签: