#include<iostream>
#include<string>
using namespace std;
#define RSB 0 //Right square bracket 右方括号
#define VT 1 //非终结符
#define RB 2 //Right bracket 右括号
#define EQUAL 3//=号
/*
L → AL'
L'→ ||AL' | ε
A → BA'
A' → &&BA' | ε
B → !R | R
R → ER' | [L]
R' → >R'' | <R'' | ==E | !=E | ε
R'' → =E | E
E → TE'
E' → +TE'|ε
T → FT'
T' → *FT'|ε
F → (E) | i
*/
void L();
void Lp();
void A();
void Ap();
void B();
void R();
void Rp();
void Rpp();
void E();
void E();
void Ep();
void T();
void Tp();
void F();
void D(string s);
void D(char now,string fun);
string s;
int i = 0;
int main(){
while(1){
cin>>s;
s += '#';
i = 0;
try{
L();
}
catch(int e){
cout<<"在("<<i+1<<")"<<s[i]<<"处停止。"<<endl;
switch(e){
case RSB:
cout<<"没有找到右方括号]。"<<endl;
continue;
case VT:
cout<<"没有匹配到非终结符i。"<<endl;
continue;
case RB:
cout<<"没有找到右括号)。"<<endl;
continue;
case EQUAL:
cout<<"没有找到等号=。"<<endl;
continue;
default:
break;
};
}
if(i<s.length() && s[i] == '#')cout<<"匹配成功!"<<endl;
else{
cout<<"匹配不成功!"<<endl;
cout<<"在("<<i+1<<")"<<s[i]<<"处停止。"<<endl;
}
}
return 0;
}
void D(string s){
cout<<s<<endl;
}
void D(char now,string fun){
cout<<now<<' '<<fun<<endl;
}
void L(){
A();
Lp();
}
void Lp(){
if(s[i] == '|' && s[i+1] == '|'){
i += 2;
A();
Lp();
return;
}
}
void A(){
B();
Ap();
}
void Ap(){
if(s[i] == '&' && s[i+1] == '&'){
i += 2;
B();
Ap();
}
}
void B(){
if(s[i] == '!'){
++i;
}
R();
}
void R(){
if(s[i] == '['){
++i;
L();
if(s[i] == ']'){
++i;
return;
}
else{
throw RSB;//右方括号
}
}
E();
Rp();
}
void Rp(){
switch(s[i]){
case '>':
case '<':
++i;
Rpp();
return;
case '=':
case '!':
++i;
if( s[i] == '='){
++i;
}
else{
throw EQUAL;
}
E();
return;
default:
return;
};
}
void Rpp(){
if(s[i] == '='){
++i;
}
E();
}
void E(){
T();
Ep();
}
void Ep(){
if(s[i] == '+'){
++i;
T();
Ep();
}
}
void T(){
F();
Tp();
}
void Tp(){
if(s[i] == '*'){
++i;
F();
Tp();
}
}
void F(){
switch(s[i]){
case '(':
++i;
E();
if(s[i] == ')'){
++i;
}
else{
throw RB;//没有匹配到右括号
}
break;
case 'i':
++i;
break;
default:
//D("没有匹配到F");
throw VT;//没有匹配到非终结符i 或 (
};
}