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

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)语法分析程序实验报告
LL(1)语法分析程序实验报告_物理_自然科学_专业资料。编译原理语法分析实验报告《...是是 LL(1)文法? 是判断句型 报错 结束 4.源程序 /*** 语法分析程序 作...
编译原理LL(1)语法分析实验报告
实验日期 2013.04.08 实【实验名称】 【实验目的】 验 报 告 LL(1)语法分析 通过完成预测分析法的语法分析程序,了解预测分析法和递归子程序法的区别和联系。 ...
编译原理实验二语法分析器LL(1)实现
编译原理实验语法分析LL(1)实现_工学_高等教育_教育专区。编译原理程序设计...("请将源文件置于以下位置并按以下方式命名:F:\\2.txt\n"); if((fp=...
LL(1)语法分析程序实验报告
LL(1)语法分析程序实验报告_工学_高等教育_教育专区。1.设计要求(1)对输入文法...是 是 LL(1)文法? 是 判断句型 报错 结束 4.源程序 /***/ #include<s...
实验二 LL(1)分析法实验报告
实验二一、 实验目的 LL(1)分析法 通过完成预测分析法的语法分析程序, 了解...二、实验内容及设计原理所谓 LL(1)分析法,就是指从左到右扫描输入串(源程序...
LL(1)语法分析程序实验报告
LL(1)语法分析程序实验报告_理学_高等教育_教育专区。编译原理词法分析,语法...是 是 LL(1)文法? 是 判断句型 报错 结束 4.源程序 /*** 语法分析程序 ...
北邮编译原理LL(1)语法分析程序
北邮大三编译原理实验报告及源代码北邮大三编译原理实验报告及源代码隐藏>> LL(1)语法分析程序 2010211306 班赵雪莹(10211310) 语法分析程序: 该语法分析程序实现对...
计算_LL(1)分析法实验报告
调试一个典型的语法分析程序,实现对词法分析程序所提供的单词序列 进行语法检查...三、实验过程记录:(1)写出程序 /*LL(1)分析法源程序,只能在 VC++中运行 ...
编译原理_LL(1)文法源代码(实验三)
编译原理_LL(1)文法源代码(实验三)_数学_自然科学_专业资料。一、实验目的及要求 1.掌握 LL(1)分析法的基本原理; 2.掌握 LL(1)分析表的构造方法; 3.用 ...
LL1语法分析实验报告
LL(1)语法分析一, 实验名称: 实现 LL 分析。 二, 实验要求: 输入任意文法 ...(源程序) , 同时采用最左推导,且对每次直接推导只需向前看一个输入符 号,便...
更多相关标签: