class TStr2PPN {
AnsiString instr, outstr; //input & output strings
char curc; //the current character
int iin; //the index of the input string
char nextChar(); //get the next character
void begin(); //handle plus & minus
void mult_div(); //handle multiplication & division
void symbol(); //handle characters & brackets
public:
TStr2PPN() { //constructor
iin = 1;
}
void convert(char *str); //convert to PPN
AnsiString get_outstr(); //get the output string
};
//get the next character
inline char TStr2PPN::nextChar() {
if(iin <= instr.Length()) return curc = instr[iin++];
return curc = '\0';
}
//get the output string
inline AnsiString TStr2PPN::get_outstr(){return outstr;}
//convert to PPN
void TStr2PPN::convert(char *str) {
try {
instr = str;
outstr.SetLength(0);
iin = 1;
nextChar();
//begin the convertation
begin();
if(iin != (instr.Length()+1) || curc != '\0') {
throw Exception("Syntax error");
}
if(!isalpha(instr
[instr.
Length()]) && instr
[instr.
Length()]!=')') { throw Exception("Syntax error");
}
}
catch(...) {throw;}
}
//handle plus & minus
void TStr2PPN::begin() {
try {
mult_div();
while(curc=='+' || curc=='-') {
char temp = curc;
nextChar();
mult_div();
outstr += temp;
}
}
catch(...) {throw;}
}
//handle multiplication & division
void TStr2PPN::mult_div() {
try {
symbol();
while(curc=='*' || curc=='/') {
char temp = curc;
nextChar();
symbol();
outstr += temp;
}
}
catch(...) {throw;}
}
//handle characters
void TStr2PPN::symbol() {
try {
if(curc=='(') {
nextChar();
begin();
if(curc!=')') {
throw Exception("Error: wrong number of brackets");
}
else nextChar();
}
else
outstr += curc;
nextChar();
}
else {throw Exception("Syntax error");}
}
catch(...) {throw;}
}
Y2xhc3MgVFN0cjJQUE4gewogICAgQW5zaVN0cmluZyBpbnN0ciwgb3V0c3RyOyAgICAgLy9pbnB1dCAmIG91dHB1dCBzdHJpbmdzCiAgICBjaGFyIGN1cmM7ICAgICAgICAgICAgICAgICAgICAvL3RoZSBjdXJyZW50IGNoYXJhY3RlcgogICAgaW50IGlpbjsgICAgICAgICAgICAgICAgICAgICAgLy90aGUgaW5kZXggb2YgdGhlIGlucHV0IHN0cmluZwoKICAgIGNoYXIgbmV4dENoYXIoKTsgICAgICAgICAgICAgIC8vZ2V0IHRoZSBuZXh0IGNoYXJhY3RlcgogICAgdm9pZCBiZWdpbigpOyAgICAgICAgICAgICAgICAgLy9oYW5kbGUgcGx1cyAmIG1pbnVzCiAgICB2b2lkIG11bHRfZGl2KCk7ICAgICAgICAgICAgICAvL2hhbmRsZSBtdWx0aXBsaWNhdGlvbiAmIGRpdmlzaW9uCiAgICB2b2lkIHN5bWJvbCgpOyAgICAgICAgICAgICAgICAvL2hhbmRsZSBjaGFyYWN0ZXJzICYgYnJhY2tldHMKCiAgcHVibGljOgogICAgVFN0cjJQUE4oKSB7ICAgICAgICAgICAgICAgICAgLy9jb25zdHJ1Y3RvcgogICAgICAgaWluID0gMTsKICAgIH0KCiAgICB2b2lkIGNvbnZlcnQoY2hhciAqc3RyKTsgICAgICAvL2NvbnZlcnQgdG8gUFBOCiAgICBBbnNpU3RyaW5nIGdldF9vdXRzdHIoKTsgICAgICAvL2dldCB0aGUgb3V0cHV0IHN0cmluZwp9OwoKCi8vZ2V0IHRoZSBuZXh0IGNoYXJhY3RlcgppbmxpbmUgY2hhciBUU3RyMlBQTjo6bmV4dENoYXIoKSB7CiAgIGlmKGlpbiA8PSBpbnN0ci5MZW5ndGgoKSkgcmV0dXJuIGN1cmMgPSBpbnN0cltpaW4rK107CiAgIHJldHVybiBjdXJjID0gJ1wwJzsKfQoKLy9nZXQgdGhlIG91dHB1dCBzdHJpbmcKaW5saW5lIEFuc2lTdHJpbmcgVFN0cjJQUE46OmdldF9vdXRzdHIoKXtyZXR1cm4gb3V0c3RyO30KCi8vY29udmVydCB0byBQUE4Kdm9pZCBUU3RyMlBQTjo6Y29udmVydChjaGFyICpzdHIpIHsKICAgdHJ5IHsKICAgICAgaW5zdHIgPSBzdHI7CiAgICAgIG91dHN0ci5TZXRMZW5ndGgoMCk7CiAgICAgIGlpbiA9IDE7CiAgICAgIG5leHRDaGFyKCk7CiAgICAgIC8vYmVnaW4gdGhlIGNvbnZlcnRhdGlvbgogICAgICBiZWdpbigpOwogICAgICBpZihpaW4gIT0gKGluc3RyLkxlbmd0aCgpKzEpIHx8IGN1cmMgIT0gJ1wwJykgewogICAgICAgICB0aHJvdyBFeGNlcHRpb24oIlN5bnRheCBlcnJvciIpOwogICAgICB9CiAgICAgIGlmKCFpc2FscGhhKGluc3RyW2luc3RyLkxlbmd0aCgpXSkgJiYgaW5zdHJbaW5zdHIuTGVuZ3RoKCldIT0nKScpIHsKICAgICAgICAgdGhyb3cgRXhjZXB0aW9uKCJTeW50YXggZXJyb3IiKTsKICAgICAgfQogICB9CiAgIGNhdGNoKC4uLikge3Rocm93O30KfQoKLy9oYW5kbGUgcGx1cyAmIG1pbnVzCnZvaWQgVFN0cjJQUE46OmJlZ2luKCkgewogICB0cnkgewogICAgICAgbXVsdF9kaXYoKTsKICAgICAgIHdoaWxlKGN1cmM9PScrJyB8fCBjdXJjPT0nLScpIHsKICAgICAgICAgIGNoYXIgdGVtcCA9IGN1cmM7CiAgICAgICAgICBuZXh0Q2hhcigpOwogICAgICAgICAgbXVsdF9kaXYoKTsKICAgICAgICAgIG91dHN0ciArPSB0ZW1wOwogICAgICAgfQogICB9CiAgIGNhdGNoKC4uLikge3Rocm93O30KfQoKLy9oYW5kbGUgbXVsdGlwbGljYXRpb24gJiBkaXZpc2lvbgp2b2lkIFRTdHIyUFBOOjptdWx0X2RpdigpIHsKICAgdHJ5IHsKICAgICAgIHN5bWJvbCgpOwogICAgICAgd2hpbGUoY3VyYz09JyonIHx8IGN1cmM9PScvJykgewogICAgICAgICAgY2hhciB0ZW1wID0gY3VyYzsKICAgICAgICAgIG5leHRDaGFyKCk7CiAgICAgICAgICBzeW1ib2woKTsKICAgICAgICAgIG91dHN0ciArPSB0ZW1wOwogICAgICAgfQogICB9CiAgIGNhdGNoKC4uLikge3Rocm93O30KfQoKLy9oYW5kbGUgY2hhcmFjdGVycwp2b2lkIFRTdHIyUFBOOjpzeW1ib2woKSB7CiAgIHRyeSB7CiAgICAgIGlmKGN1cmM9PScoJykgewogICAgICAgICBuZXh0Q2hhcigpOwogICAgICAgICBiZWdpbigpOwogICAgICAgICBpZihjdXJjIT0nKScpIHsKICAgICAgICAgICAgdGhyb3cgRXhjZXB0aW9uKCJFcnJvcjogd3JvbmcgbnVtYmVyIG9mIGJyYWNrZXRzIik7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBuZXh0Q2hhcigpOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgICAgaWYoaXNhbHBoYShjdXJjKSkgewogICAgICAgICAgICBvdXRzdHIgKz0gY3VyYzsKICAgICAgICAgICAgbmV4dENoYXIoKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHt0aHJvdyBFeGNlcHRpb24oIlN5bnRheCBlcnJvciIpO30KICAgfQogICBjYXRjaCguLi4pIHt0aHJvdzt9Cn0=
prog.c:1:1: error: unknown type name ‘class’
class TStr2PPN {
^~~~~
prog.c:1:16: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
class TStr2PPN {
^
prog.c:22:21: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘:’ token
inline char TStr2PPN::nextChar() {
^
prog.c:28:8: error: unknown type name ‘AnsiString’
inline AnsiString TStr2PPN::get_outstr(){return outstr;}
^~~~~~~~~~
prog.c:28:27: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘:’ token
inline AnsiString TStr2PPN::get_outstr(){return outstr;}
^
prog.c:31:14: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘:’ token
void TStr2PPN::convert(char *str) {
^
prog.c:50:14: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘:’ token
void TStr2PPN::begin() {
^
prog.c:64:14: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘:’ token
void TStr2PPN::mult_div() {
^
prog.c:78:14: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘:’ token
void TStr2PPN::symbol() {
^