资源简介
编译原理语法分析中的算符优先编译原理语法分析中的算符优先编译原理语法分析中的算符优先编译原理语法分析中的算符优先编译原理语法分析中的算符优先编译原理语法分析中的算符优先编译原理语法分析中的算符优先编译原理语法分析中的算符优先编译原理语法分析中的算符优先编译原理语法分析中的算符优先
代码片段和文件信息
/* 对于书证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的调幅发射机
- 下一篇:图的基本操作
相关资源
- 编译原理LL(1)分析法
- 编译原理实验报告及源码,LR1 活前缀
- 布尔表达式的语法分析及语义分析程
- 实验三 学习用递归下降算法和YACC工具
- 编译原理 算符优先文法 实验报告 代
- 编译原理__语义分析_实验报告
- 语义分析代码
- 编译原理大作业 源码
- 编译原理pl\\0词法分析程序
- 语法分析实验报告.docx
- 编译原理实验2-LL1分析法实现
- 编译原理实验词法分析器、中间代码
- 编译原理课程设计--编译器
- 编译课设-词法分析,语法分析.zip
- 简易编译器,实现词法分析,语法分
- tiny词法分析,语法分析,语义分析,
- 编译原理 算符优先分析程序
- 编译原理-非递归预测实验-C代码实现
- 编译原理实验
- 编译原理自顶向下语法分析源代码+实
- 编译原理布尔表达式计算器
- LR语法分析器
- 编译原理语法制导翻译器 课程设计
- 编译原理——语法分析器
- 一个简单的赋值语句语法分析可以运
- 编译原理实验指导书
- 第四次上机—自下而上的语法分析
- 编译原理预测分析法语法分析程序
- 编译课程设计算数表达式转换成四元
- 广东工业大学编译原理试卷
评论
共有 条评论