#include "stdio.h" #include "stdlib.h" int _[1000]; #define n(o) ; if(_[1]) goto o; /* INPUT: l - pattern m - string to match against pattern OUTPUT: TRUE if l matches m, FALSE otherwise. */ int match( const char* l, const char* m ) { _[0]=0; _[_[0]+'0']=0; _[_[0]+'1']=0; _[_[0]+'2']=0; g: _[_[0]+'3']=l[_[_[0]+'0']]; _[_[0]+'4']=m[_[_[0]+'1']]; _[_[0]+'5']=0; _[1]=_[_[0]+'3']!=0; n(d) _[_[0]+'5']=!_ [_[0]+'4']; _[1]=1; n(a) d: _[1]=_[_[0]+'3']!='*'; n(c) _[0]+=6; _[_[0]+'0']=_[_[0]+'*']+1; _[_[0]+'1']=_[_[0]+ '+'];_[_[0]+'2']=1;_[1]=1;n(g)h:_[_[0]+'/']=_[_[0]+'5'] ;_[1]=!(!_[_[0]+'/']&&_[_[0]-6+'4']);n(f)_[_[0]+'0']=_[ _[0]+'*'];_[_[0]+'1']=_[_[0]+'+']+1;_[_[0]+'2']=2;_[1]= 1;n(g)i:_[_[0]+'/']=_[_[0]+'5'];f:_[0]-=6;_[1]=1;n(a)c: _[1]=_[_[0]+'3']!='?';n(b)_[1]=!_[_[0]+'4'];n(e)_[0]+=6 ;_[_[0]+'0']=_[_[0]+'*']+1;_[_[0]+'1']=_[_[0]+'+']+1;_[ _[0]+'2']=3;_[1]=1;n(g)j:_[_[0]+'/']=_[_[0]+'5'];_[0]-= 6;e:_[1]=1;n(a)b:_[_[0]+'3']|=32;_[_[0]+'4']|=32;_[1]=_ [_[0]+'3']!=_[_[0]+'4'];n(a)_[0]+=6;_[_[0]+'0']=_[_[0]+ '*']+1;_[_[0]+'1']=_[_[0]+'+']+1;_[_[0]+'2']=4;_[1]=1;n (g)k:_[_[0]+'/']=_[_[0]+'5'];_[0]-=6;a:_[2]=1;_[1]=_[_[ 0]+'2']==_[2]++;n(h)_[1]=_[_[0]+'2']==_[2]++;n(i)_[1]=_ [_[0]+'2']==_[2]++;n(j)_[1]=_[_[0]+'2']==_[2]++;n(k) return _[_[0]+'5']; }