出一题编译原理题

来源:百度知道 编辑:UC知道 时间:2024/09/25 19:22:53
完成括号匹配的判断,输入一串括号(中括号或者小括号),判断它是否是正确的。例如 [ [ ( ) ] 是合法的,()()([])也是正确的。而[ [ ( ] )是不合法的。

编写程序完成,并且用至少不低于10组的数据进行测试,有5组是正确的输入,5组是错误的输入。

以下是程序:
#include<stdlib.h>
#include<stdio.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define STACK_INIT_SIZE 80 //初始存储空间
#define STACKINCREMENT 10 //存储空间增量
typedef int Status;
typedef char SElemType;
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
Status InitStack(SqStack &s)
{ //构造一个空栈s
s.base=(SElemType *)malloc(STACK_INIT_SIZE *sizeof(SElemType));
if(!s.base)exit(OVERFLOW);
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return OK;
}//InitStack
Status Push(SqStack &s,SElemType e)
{ //插入e为新栈顶元素
if(s.top-s.base>=s.stacksize)
{ //栈满,追加存储空间
s.base=(SElemType *)realloc(s.base,
(s.stacksize+STACKINCREMENT)*sizeof(SElemType));<

程序好像没问题啊,除了只能测试一组输入外

把main改一下就可以测试10组了

void main()
{
char str[100];
SqStack s;
int i=0;
while(i<10)
{
InitStack(s);
printf("Input string chars:");
scanf("%s",str);
PaMatch(s,str);
ClearStack(s);
i++;
}
}

程序中提示16行语法错误。18和21行提示有非法字符。晕。。。。