• 大小: 2KB
    文件类型: .rar
    金币: 2
    下载: 2 次
    发布日期: 2021-08-19
  • 语言: C/C++
  • 标签:

资源简介

实验目的:算术表达式的文法(你可以根据需要适当改变): E→E+E|E-E|E*E|E/E|(E)|i 根据算符优先分析法,将表达式进行语法分析,判断一个表达式是否正确。 程序要求: 程序输入/输出示例: 如参考C语言的运算符。输入如下表达式(以#为结束)和输出结果: (1)10# 输出:正确

资源截图

代码片段和文件信息

/*
*该文法为课程设计指导书,“算符优先文法处理算术表达式”
*算术表达式的文法:
* E→E+E|E-E|E*E|E/E|(E)|1|2|3|4|5|6|7|8|9|0
*/
#include “stdio.h“
#include “stdlib.h“
#include “iostream.h“
char data[20][20];
char s[100];
char lable[20];
char input[100];
char string[20][10];
char qa;
int kjr1;

char st[10][10]={{‘E‘‘-‘‘>‘‘E‘‘+‘‘E‘‘|‘‘E‘‘-‘‘E‘}
{‘|‘‘E‘‘*‘‘E‘‘|‘‘E‘‘/‘‘E‘‘|‘‘(‘}
{‘E‘‘)‘‘|‘‘1‘‘|‘‘2‘‘|‘‘3‘‘|‘‘4‘}
{‘|‘‘5‘‘|‘‘6‘‘|‘‘7‘‘|‘‘8‘‘|‘‘9‘}
{‘|‘‘0‘}
};
char first[10][10]; 
char last[10][10]; 
int fflag[10]={0};
int lflag[10]={0};  
int deal(); 
int zhongjie(char c); 
int xiabiao(char c);  
void out(int jint kchar *s);  
void firstvt(char c);  
void lastvt(char c);  
void table(); 
void main()
{
int ijk=0;
first[0][0]=0;
last[0][0]=0;
    for(i=0;i<1;i++)
{
for(j=0;st[i][j]!=‘\0‘;j++)
{
if((st[i][j]<‘A‘||st[i][j]>‘Z‘)&&st[i][j]!=‘-‘&&st[i][j]!=‘>‘&&st[i][j]!=‘|‘)
lable[k++]=st[i][j];
}
}
lable[k]=‘#‘;
lable[k+1]=‘\0‘;  
table();

/*printf(“非终结符的FIRSTVT集为:\n“);
for(i=0;i<1;i++)
{
printf(“%c: “st[i][0]);
for(j=0;j {
printf(“%c “first[i][j+1]);
}
printf(“\n“);
}
printf(“非终结符的LASTVT集为:\n“);
for(i=0;i<1;i++)
{
printf(“%c: “st[i][0]);
for(j=0;j {
printf(“%c “last[i][j+1]);
}
printf(“\n“);
}*/
printf(“算符优先分析表如下:\n“);
printf(“    “);
for(i=0;lable[i]!=‘\0‘;i++)                     
printf(“%4c“lable[i]);
printf(“\n“);                                   
for(i=0;i {
printf(“%4c“lable[i]);
for(j=0;j {
printf(“%4c“data[i][j]);
}
printf(“\n“);
}
printf(“请输入表达式(以#结束):“);
scanf(“%s“input);                                          
deal();
}
void table()
{
char text[20][10];
int ijktlx=0y=0;
int mn;
x=0;
for(i=0;i<1;i++)
{
firstvt(st[i][0]);
lastvt(st[i][0]);
}
for(i=0;i<1;i++)
{
text[x][y]=st[i][0];
y++;
for(j=1;st[i][j]!=‘\0‘;j++)
{
if(st[i][j]==‘|‘)
{
text[x][y]=‘\0‘;
x++;
y=0;
text[x][y]=st[i][0];
y++;
text[x][y++]=‘-‘;
text[x][y++]=‘>‘;
}
else
{
text[x][y]=st[i][j];
y++;
}
}
text[x][y]=‘\0‘;
x++;
y=0;
}
r1=x;
printf(“本程序文法为:\n“);
for(i=0;i {
printf(“%s\n“text[i]);
}
for(i=0;i {
string[i][0]=text[i][0];
for(j=3l=1;text[i][j]!=‘\0‘;j++l++)
string[i][l]=text[i][j];
string[i][l]=‘\0‘;
}


for(i=0;i {
for(j=1;text[i][j+1]!=‘\0‘;j++)
{
if(zhongjie(text[i][j])&&zhongjie(text[i][j+1]))
{
m=xiabiao(text[i][j]);
n=xiabiao(text[i][j+1]);
data[m][n]=‘=‘;
}
if(text[i][j+2]!=‘\0‘&&zhongjie(text[i][j])&&zhongjie(text[i][j+2])&&!zhongjie(text[i][j+1]))
{
m=xiabiao(text[i][j]);
n=xiabiao(text[i][j+2]);
data[m][n]=‘=‘;
}
if(zhongjie(text[i][j])&&!zhongjie(text[i][j+1]))
{

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       7078  2011-06-21 10:52  1.cpp

----------- ---------  ---------- -----  ----

                 7078                    1


评论

共有 条评论

相关资源