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

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)语法分析程序实验报告.doc
LL(1)语法分析程序实验报告 - LL1 实验报告 1.设计原理 所谓 LL(1)分析法,就是指从左到右扫描输入串(源程序) ,同时采用最左推导,且 对每次直接推导只需...
LL(1)语法分析程序实验报告.doc
LL(1)语法分析程序实验报告 - 《编译原理》 上机实验报告 1.设计要求 (1)对输入文法,它能判断是否为 LL(1)文法,若是,则转(2) ;否则报错并 终止; (2)...
编译原理_LL(1)文法源代码(实验三).doc
编译原理_LL(1)文法源代码(实验三) - 一、实验目的及要求 1.掌握 LL(1)分析法的基本原理; 2.掌握 LL(1)分析表的构造方法; 3.用 LL(1)分析分析高级...
实验3LL(1)语法分析程序.doc
实验3LL(1)语法分析程序 - GDOU-B-11-112 广东海洋大学学生实验报告书(学生用表) 实验名称 实验 3:LL(1)语法分析程序 课程名称 学院(系) 学生姓名 数计...
LL(1)语法分析程序.doc
LL(1)语法分析程序 - 《编译原理》上机实验报告 题目:LL(1)语法分析程序 1.设计要求 (1)对输入文法,它能判断是否为 LL(1)文法,若是,则转(2) ;否则报错...
编译原理实验二语法分析器LL(1)实现.doc
编译原理实验语法分析LL(1)实现_工学_高等教育_教育专区。编译原理程序设计...("请将源文件置于以下位置并按以下方式命名:F:\\2.txt\n"); if((fp=...
LL(1)语法分析程序实验报告.doc
LL(1)语法分析程序实验报告 - LL(1)语法分析程序实验报告 实验目的与要求: 通过设计、编写和调试构造 First 集合、Follow 集合和 LL(1)预测分析表,利用 LL(1...
实验二 LL1语法分析器.doc
实验二一、实验目的 LL(1)分析法 通过完成预测分析法的语法分析程序,了解预测...(8)F->i 输出的格式如下: 五、实验源程序 LL1.java import import import...
实验二 LL(1)分析法实验报告.doc
实验LL(1)分析法实验报告 - 实验二 一、 实验目的 LL(1)分析法 通过完成预测分析法的语法分析程序, 了解预测分析法和递归子程序法的区 别和联系。 使...
LL(1)语法分析程序实验报告.pdf
LL(1)语法分析程序实验报告 - 编译原理课程实验报告,实现了对不同文法求Fo
【实验2】 LL(1)文法分析器.doc
《编译原理》课程实验 实验 2 实验 2 实验题目:编写 LL(1)文法分析器 LL(1...设计原理:所谓 LL(1)分析法,就是指从左到右扫描输入串(源程序),同时采用最...
LL(1)文法分析表用C语言实现.txt
*** * 实验LL(1)分析表演示程序模板(教学实验用) * * 采用LL(1)分析法实现表达式文法语法检验。 * (0)E ->TX * (1)X ->+TX (2)X ->-...
LL(1)语法分析.txt
LL(1)语法分析 - LL(1)语法分析 实验目的 1 掌握LL(1)分析法的基本原理 2 掌握LL(1)分析表的构造方法 3 掌握LL(1)驱动程序的构造方法 实验学时 4学时...
编译原理LL(1)语法分析实验报告.doc
编译原理LL(1)语法分析实验报告_IT/计算机_专业资料。编译原理实验报告学号...(E)|i# ) 【流程图 流程图】 流程图 1 【源代码 源代码源代码 #...
编译原理 LL(1)语法分析器java版 完整源代码.doc
编译原理 LL(1)语法分析器java版 完整源代码_计算机软件及应用_IT/计算机_专业资料。编译原理 LL(1)语法分析器java代码 可运行 ...
编译原理实验报告词法分析器和LL(1)文法.doc
编译原理实验报告词法分析器和LL(1)文法 - 《编译原理》综合性 实验报告 实验学期 专业 2016 至 2017 班级 学年 第 1 学期 计算机科学与技术 黄世...
编译原理LL(1)文法分析器实验(java)00.doc
编译原理 LL(1)文法分析实验计科 1111 刘琴英 201111621120 本程序是基于已构建好的某一个语法的预测分析表来对用户的输入字符串 进行分析,判断输入的字符串...
LL1分析法实验报告.doc
LL1分析法实验报告 - 实验二 一、实验目的 LL(1)分析法 通过完成预测分析法的语法分析程序, 了解预测分析法和递归 子程序法的区别和联系。了解语法分析的功能,...
编译原理LL(1)语法分析实验报告.doc
实验日期 2013.04.08 实【实验名称】 【实验目的】 验 报 告 LL(1)语法分析 通过完成预测分析法的语法分析程序,了解预测分析法和递归子程序法的区别和联系。 ...
编译原理--实验报告3LL1.doc
实验课程名称 实验课程名称:编译原理课程设计 ★实验项目:LL1 语法分析程序开发 ...(1)语法分析;其它的栈是为了在语法分析的过程中同时生成与源程序结构对应的语 ...
更多相关标签: