Problem z parserm
Ostatnio zmodyfikowano 2011-08-20 16:52
MrOsamaful Temat założony przez niniejszego użytkownika |
Problem z parserm » 2011-08-02 14:05:34 Cześć, napisałem sobie prosty parser wyrażeń arytmetycznych, który działa wg tej gramatyki. Sum: Sum Sum + Mult Sum - Mult Mult: Mult Mult * Num Mult / Num Num: Num
No ale mam problem, z tym, żeby wykonywał całe działanie, jeżeli jest np 2 + 2 * 2 To wykona tylko 2 + 2 Jeżeli np 2 / 2 * 4 To wykona tylko 2 / 2 Czyli tylko tą pierwszą część. Nie mam pojęcia jak zrobić by obliczał całe wyrażenie, coś tam próbowałem ze znakiem końca wyrażenia itp ale nie za bardzo mi to wychodzi :/ main.cpp #include <iostream> #include <vector>
using namespace std;
vector < int > num; vector < char > op;
void prep() { num.push_back( 2 ); num.push_back( 3 ); num.push_back( 4 ); op.push_back( '/' ); op.push_back( '*' ); op.push_back( '@' ); }
int pos = 0; int op_pos = 0;
int parse_number() { int n = num[ pos ]; pos++; cout << "Number: " << n << endl; return n; } int parse_mult() { cout << "Parse_mult" << endl; char o = op[ op_pos ]; int n = parse_number(); while( o == '*' || o == '/' ) { cout << o << endl; switch( o ) { case '*': op_pos++; return n *= parse_number(); case '/': op_pos++; return n /= parse_number(); } } return n; }
int parse_sum() { cout << "Parse_sum" << endl; char o = op[ op_pos ]; int n = parse_mult(); while( o == '+' || o == '-' ) { cout << o << endl; switch( o ) { case '+': op_pos++; return n += parse_mult(); case '-': op_pos++; return n += parse_mult(); } } return n; }
int parse_exp() { int n = 0; while( op[ op_pos ] != '@' ) { n += parse_sum(); } return n; } int main() { prep(); int n = parse_exp(); cout << n << endl; return 0; }
|
|
mati1qazxsw2 |
» 2011-08-02 16:43:40 Poczytaj o Odwrotnej Notacji Polskiej, bardzo prosty do zaimplementowania. |
|
MrOsamaful Temat założony przez niniejszego użytkownika |
» 2011-08-02 18:47:14 Ale ja nie chcę odwrotnej notacji polskiej >.>. Zresztą tu mam napisane 99% tylko nie wiem jak dodać, żeby pobierał kolejne argumenty... Po co mam pisać od nowa wszystko? |
|
akwes |
» 2011-08-02 19:22:54 Bo czasami napisanie nowego projektu jest tańsze niż rozwijanie starego. |
|
MrOsamaful Temat założony przez niniejszego użytkownika |
» 2011-08-02 19:29:47 Ale to jest kwestia dodania +- 15 linijek kodu... |
|
DejaVu |
» 2011-08-05 16:08:50 Skoro wiesz, że to jest kwestia ~15 linii kodu to czemu pytasz się nas jak rozwiązać Twój problem? :) |
|
MrOsamaful Temat założony przez niniejszego użytkownika |
» 2011-08-06 20:44:54 Bo mam z tym problem. |
|
mati1qazxsw2 |
» 2011-08-07 11:44:15 Mylisz się, to kwestia setek linii kodu. |
|
« 1 » 2 |