资源简介
根据某一文法编制调试LL(1)分析程序,以便对任意输入的符号串进行分析。

代码片段和文件信息
/*LL(1)分析法源程序,只能在VC++中运行 */
#include
#include
#include
#include
char A[20]; /*分析栈*/
char B[20]; /*剩余串*/
char v1[20]={‘i‘‘+‘‘*‘‘(‘‘)‘‘#‘}; /*终结符 */
char v2[20]={‘E‘‘G‘‘T‘‘S‘‘F‘}; /*非终结符 */
int j=0b=0top=0l; /*L为输入串长度 */
typedef struct type /*产生式类型定义 */
{
char origin; /*大写字符 */
char array[5]; /*产生式右边字符 */
int length; /*字符个数 */
}type;
type etgg1ss1ff1; /*结构体变量 */
type C[10][10]; /*预测分析表 */
/*--------------------------------*/
/*输出分析栈 */
void print()
{
int a; /*指针*/
for(a=0;a<=top+1;a++)
printf(“%c“A[a]);
printf(“\t\t“);
}
/*--------------------------------*/
/*输出剩余串*/
void print1()
{
int j;
for(j=0;j printf(“ “);
for(j=b;j<=l;j++)
printf(“%c“B[j]);
printf(“\t\t\t“);
}
/*--------------------------------*/
void main()
{
int mnk=0flag=0finish=0;
char chx;
type cha;/*用来接受C[m][n]*/
/*把文法产生式赋值结构体*/
e.origin=‘E‘; strcpy(e.array“TG“); e.length=2;
t.origin=‘T‘; strcpy(t.array“FS“); t.length=2;
g.origin=‘G‘; strcpy(g.array“+TG“); g.length=3;
g1.origin=‘G‘; g1.array[0]=‘^‘; g1.length=1;
s.origin=‘S‘; strcpy(s.array“*FS“); s.length=3;
s1.origin=‘S‘; s1.array[0]=‘^‘; s1.length=1;
f.origin=‘F‘; strcpy(f.array“(E)“); f.length=3;
f1.origin=‘F‘; f1.array[0]=‘i‘; f1.length=1;
/*初始化分析表*/
for(m=0;m<=4;m++)
for(n=0;n<=5;n++)
C[m][n].origin=‘N‘;/*全部赋为空*/
/*填充分析表*/
C[0][0]=e; C[0][3]=e;
C[1][1]=g; C[1][4]=g1; C[1][5]=g1;
C[2][0]=t; C[2][3]=t;
C[3][1]=s1; C[3][2]=s; C[3][4]=C[3][5]=s1;
C[4][0]=f1; C[4][3]=f;
printf(“提示:本程序只能对由‘i‘‘+‘‘*‘‘(‘‘)‘构成的以‘#‘结束的字符串进行分析\n“);
printf(“请输入要分析的字符串:“);
do/*读入分析串*/
{
scanf(“%c“&ch);
if ((ch!=‘i‘) &&(ch!=‘+‘) &&(ch!=‘*‘)&&(ch!=‘(‘)&&(ch!=‘)‘)&&(ch!=‘#‘))
{
printf(“输入串中有非法字符\n“);
exit(1);
}
B[j]=ch;
j++;
}while(ch!=‘#‘);
l=j; /*分析串长度*/
ch=B[0]; /*当前分析字符*/
A[top]=‘#‘; A[++top]=‘E‘; /*‘#‘‘E‘进栈*/
printf(“步骤\t\t分析栈 \t\t剩余字符 \t\t所用产生式 \n“);
do
{
x=A[top--];/*x为当前栈顶字符*/
printf(“%d“k++);
printf(“\t\t“);
for(j=0;j<=5;j++)/*判断是否为终结符*/
if(x==v1[j])
{
flag=1;
break;
}
if(flag==1)/*如果是终结符*/
{
if(x==‘#‘)
{
finish=1; /*结束标记*/
printf(“acc!\n“); /*接受 */
getchar();
getchar();
exit(1);
}
if(x==ch)
{
print();
print1();
printf(“%c匹配\n“ch);
ch=B[++b]; /*下一个输入字符*/
flag=0; /*恢复标记*/
}
else
{ /*出错处理*/
print();
print1();
printf(“%c出错\n“ch);/*输出出错终结符*/
exit(1);
}
}
else
{ /*非终结符处理*/
for(j=0;j<=4;j++)
if(x==v2[j])
{
m=j; /* m: 分析表行号*/
break;
}
for(j=0;j<=5;j++)
if(ch==v1[j])
{
n=j; /*n: 分析表列号*/
break;
}
cha=C[m][n];
if(cha.origin!=‘N‘)/*判断是否为空*/
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 36352 2008-10-26 20:43 LL(1)分析\实验05-LL(1)分析.doc
文件 47 2008-10-05 19:47 LL(1)分析\t1-lower2Upper.lex
文件 57 2008-10-13 13:51 LL(1)分析\t2-printIdentifier.lex
文件 15 2008-10-13 15:46 LL(1)分析\t3-printEverything.lex
文件 113 2008-11-05 15:59 LL(1)分析\t4-dividedBy7.lex
文件 53248 2008-11-18 20:36 LL(1)分析\Debug\vc60.pdb
文件 12463 2008-11-18 20:36 LL(1)分析\Debug\3-LL1-v2.obj
文件 168003 2008-11-18 20:36 LL(1)分析\Debug\3-LL1-v2.exe
文件 427008 2008-11-18 20:36 LL(1)分析\Debug\3-LL1-v2.pdb
文件 41984 2008-11-18 20:37 LL(1)分析\3-LL1-v2.ncb
文件 744 2008-11-18 20:36 LL(1)分析\3-LL1-v2.plg
文件 3425 2008-11-18 20:13 LL(1)分析\3-LL1-v2.dsp
文件 3747 2008-11-18 20:35 LL(1)分析\3-LL1-v2.c
文件 48640 2008-11-18 20:37 LL(1)分析\3-LL1-v2.opt
文件 541 2008-11-18 20:37 LL(1)分析\3-LL1-v2.dsw
目录 0 2008-11-17 11:20 LL(1)分析\Debug
目录 0 2008-11-17 10:36 LL(1)分析
----------- --------- ---------- ----- ----
796387 17
- 上一篇:软件工程课程设计 超市管理需求分析
- 下一篇:学生选课管理系统数据库设计
相关资源
- 易语言编译原理 易语言循环首尾配对
- VisualStudioUninstaller vs卸载工具
- 编译原理实验工具及参考源码(lex&
- 组态王驱动开发包3.0.0.7(中文)
- 多窗口后台鼠标连点器
- 使用选择性重传协议实现UDP可靠通信
- 类pascal语言编译器(编译原理实验)
- VC 获得文件属性 获取文件的创建时
- 读者写者问题(读者优先,写者优先
- 用VC 编写的仿QQ聊天室程序源代码
- 外点法程序
- 外罚函数程序
- 编译原理课程设计:词法语法编译器
- qt-电子点菜系统
- 中科院 编译原理 习题及解答
- 推箱子及人工智能寻路C 源代码
- 自己写的航空订票系统c 版--数据结构
- 数据结构实验魔王语言
- 编译原理四元式和逆波兰式
- MUSIC算法c 实现
- C 餐厅叫号系统(QT平)
- 国际象棋c 完整版
-
ob
jectARX给Auto CAD加工具条 - 画图程序MFC/VC/VC CRectTracker 串行化
- MFC网络编程实例
- c 课程设计 职工信息管理系统
- VC 游戏编程—附源代码
- IpHlpApi.h&IpHlpApi.lib
- 清华大学 c 郑莉 ppt课件
- c 程序判断离散数学中命题公式
评论
共有 条评论