int i=0;
int stepcount=1;
enum type{
and,or,detrusion,equal,level,variable
};
struct node{
char *s;
type kind;
int polar;
node *next;
node *child;
int start;
};
struct step{
step *child;
step *brother;
node *lhead;
node *rhead;
int count;
char name[30];
};
while(i<len){ // i<len
if(s[i]=='|'){ //遇到 |
if(!(s[i+1]<='Z'&&s[i+1]>='A'||s[i+1]<='z'&&s[i+1]>='a')&&s[i+1]!='1'&&s[i+1]!='0'&&s[i+1]!='('&&s[i+1]!='!'||i==0)
return 0;
current=(node*)malloc(sizeof(node));
current->kind=or;
current->s=NULL;
current->next=NULL;
current->child=NULL;
current->polar=polar;
current->start=0;
if(last->kind==level&&last->child==NULL){
last->child=current;
}
else{
last->next=current;
}
last=current;
i++;
}
else if(s[i]=='&'){ //遇到 &
if(!(s[i+1]<='Z'&&s[i+1]>='A'||s[i+1]<='z'&&s[i+1]>='a')&&s[i+1]!='1'&&s[i+1]!='0'&&s[i+1]!='('&&s[i+1]!='!'||i==0)return 0;
current=(node*)malloc(sizeof(node));
current->kind=and;
current->s=NULL;
current->next=NULL;
current->child=NULL;
current->polar=polar;
current->start=0;
if(last->kind==level&&last->child==NULL){
last->child=current;
}
else{
last->next=current;
}
last=current;
i++;
}