资源简介
编译原理语法分析中的算符优先编译原理语法分析中的算符优先编译原理语法分析中的算符优先编译原理语法分析中的算符优先编译原理语法分析中的算符优先编译原理语法分析中的算符优先编译原理语法分析中的算符优先编译原理语法分析中的算符优先编译原理语法分析中的算符优先编译原理语法分析中的算符优先

代码片段和文件信息
/* 对于书证p110页例6.3中的文法
* 该文法服从算符优先文法的定义
* 该文法多对应的算符优先关系系数关系表在书中p111页
* 该算法在书中117页
*/
#include “stdio.h“
#include “string.h“
#include “malloc.h“
#define maxsize 128
FILE *fp;
char check (char a[])
{
if(strcmp(a“E+E“)==0)
return ‘E‘;
else if(strcmp(a“E-E“)==0)
return ‘E‘;
else if(strcmp(a“E*E“)==0)
return ‘E‘;
else if(strcmp(a“E/E“)==0)
return ‘E‘;
else if(strcmp(a“E^E“)==0)
return ‘E‘;
else if(strcmp(a“(E)“)==0)
return ‘E‘;
else if(strcmp(a“i“)==0)
return ‘E‘;
else return ‘G‘; //错误控制
}
typedef struct node
{
char data[maxsize];
int top;
}seqstack;
void setnull(seqstack *s) //置空栈
{
s->top=-1;
}
seqstack * push (seqstack *schar x) //进栈
{
if(s->top==maxsize-1)
{
printf(“overflow!\n“);
return NULL;
}
else
{
s->top++;
s->data[s->top]=x;
return s;
}
}
void pop (seqstack *s) //出栈
{
if(s->top<0)
printf(“underflow!\n“);
else
s->top--;
}
char top(seqstack *s) //取栈顶元素
{
if(s->top==-1)
{
printf(“stack is empty!\n“);
return NULL;
}
else
return (s->data[s->top]);
}
int myequal (char a)
{
if(a==‘+‘)
return 0;
else if(a==‘-‘)
return 1;
else if(a==‘*‘)
return 2;
else if(a==‘/‘)
return 3;
else if(a==‘^‘)
return 4;
else if(a==‘(‘)
return 5;
else if(a==‘)‘)
return 6;
else if(a==‘i‘)
return 7;
else if(a==‘#‘)
return 8;
else
return -1;
}
void printseqstack(seqstack *s) //打印出路径
{
int temp;
temp=s->top;
while (temp>=0)
{
printf(“%c“s->data[temp]);
fputc(s->data[temp]fp);
temp--;
}
}
int isvt(char a[]int nchar x)
{
int i;
for(i=0;i {
if(x==a[i])
break;
}
if(i>=n)
return 0; //不是该集合中的元素
else
return 1; //是该集合中的元素
}
void main(void)
{
if((fp=fopen(“sign-frist.txt““w“))==NULL)
{
printf(“File open fail!\n“);
return;
}
printf(“\t\t**************算符优先关系矩阵*****************\n“);
fputs(“\t\t**************算符优先关系矩阵*****************\n“fp);
int ijsum=0ktempa[9][9]={{11-1-1-1-11-11}{11-1-1-1-11-11}{1111-1-11-11}{1111-1-11-11}{1111-1-11-11}{-1-1-1-1-1-10-12}{111112121}{111112121}{-1-1-1-1-1-12-10}};
char input[maxsize]ch1ch2VT[9]={‘+‘‘-‘‘*‘‘/‘‘^‘‘(‘‘)‘‘i‘‘#‘}Q;
char V[10]={‘+‘‘-‘‘*‘‘/‘‘^‘‘(‘‘)‘‘i‘‘#‘‘E‘}; //定义所有的终结符和非终结符的集合
seqstack *s1*s2;
for (i=0;i<9;i++)
{
printf(“\t“);
fputs(“\t“fp);
for (j=0;j<9;j++)
{
if(a[i][j]==2)
{
printf (“\t“);
fputs(“\t“fp);
}
else if(a[i][j]==0)
{
fputs(“=\t“fp);
printf(“=\t“);
}
else if(a[i][j]==-1)
{
printf(“<\t“);
fputs(“<\t“fp);
}
else if(a[i][j]==1)
{
printf(“>\t“);
fputs(“>\t“fp);
}
}
printf(“\n“);
fputs(“\n“fp);
}
printf(“Please input the string that you want to check:\n“);
gets(i
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4937 2010-04-23 19:43 sign_frist.cpp
----------- --------- ---------- ----- ----
4937 1
- 上一篇:基于multisim的调幅发射机
- 下一篇:图的基本操作
相关资源
- 易语言编译原理 易语言循环首尾配对
- 编译原理实验工具及参考源码(lex&
- 类pascal语言编译器(编译原理实验)
- 编译原理课程设计:词法语法编译器
- 中科院 编译原理 习题及解答
- 编译原理四元式和逆波兰式
- 《编译原理》清华大学版中的pl0扩充
- PL/0功能扩充break功能
- 编译原理LR(0)语法分析
- 编译原理中间代码生成程序
- 编译原理:LR分析程序
- 编译原理实验:词法分析,语法分析
- 吉林大学编译原理课件
- 编译原理龙书答案
- 编译原理 第三章课后习题答案
- 易语言变量和数组的编译原理
- 编译原理语法分析器、词法分析器
- 山东大学编译原理PL/0语言 compiler实验
- FOR循环语句的翻译程序设计简单优先
- NFA的确定化NFA->DFA完整可运行代码
- pl/0编译器 语法分析
- 哈工大威海编译原理实验报告和源代
- 哈工大威海-编译原理实验报告和源码
- 编译原理课设c编译器
- 赋值语句翻译四元式
- 河北工业大学编译原理实验代码及实
- TINY+编译器 改编自原版TINY
- 编译原理课程设计 while do循环语句翻
- 编译原理课程设计do——while简单优先
- 南开大学编译原理课件及作业
评论
共有 条评论