1.就近原则(匹配字符串括号)
int isleft(char c)
{
int ret=0;
switch(c){
case '<':
case '{':
case '(':
case '[':
case '\'':
case '\"':
ret=1;
break;
default:
ret=0;
break;
}
return ret;
}
int isright(char c)
{
int ret=0;
switch(c){
case '>':
case '}':
case ')':
case ']':
case '\'':
case '\"':
ret=1;
break;
default:
ret=0;
break;
}
return ret;
}
int match(char left,char right)
{
int ret=0;
switch(left)
case '(':
if(right==')')
ret=1;
break;
case '[':
if(right==']')
ret=1;
break;
case '{':
if(right=='}')
ret=1;
break;
case '<':
if(right=='>')
ret=1;
break;
case '\'':
if(right=='\'')
ret=1;
break;
case '\"':
if(right=='\"')
ret=1;
break;
default:
ret=0;
break;
return ret;
}
int scanner(const char* code)
{
LinkStack* stack=LinkStack_create();
int i=0;
while(code[i]!='\0'){
if(isLift(code[i])){
LinkStack_Push(stack,(void*)(code+i));
}
if(isright(code[i])){
char* c=(char*)LinkStack_Pop(stack);
if(c==NULL || !match(*c,code[i])){
print("%c is not match",code[i]);
ret=0;
break;
}
}
}
if((LinkStack_Size(stack)==0)&&(code[i]=='\0'))
{
printf("succeed \n")
ret=1;
}
else
{
printf("Invalid code!\n");
ret=0;
}
LinkStack_Destory(stack);
return ret;
}
void main()
{
const char* code="#include<stdio.h> int main(){int a[][5];int(*p)[4],p=a[0];return 0;}"
scanner(code);
system("pause");
return 0;
}