// <math_term> ::= <math_signed_factor> [<mult_op> <math_signed_factor>]* void Term(CPU *cpu, Files file){ SignedFactor(cpu, file); while(IsMultOp(file)){ cpu->PushValue(); MultOp(cpu, file); } }
void Term() { SignedFactor(); while(Look == '*' || Look == '/') { EmitLn("push rax"); switch(Look) { case '*' : Multiply();break; case '/' : Divide();break; } } }
void MultOp(CPU *cpu, Files file){ switch(Peek()){ case '*': Match('*', file); SignedFactor(cpu, file); cpu->PopValue(); cpu->Multiply(); return; case '/': Match('/', file); SignedFactor(cpu, file); cpu->PopValue(); cpu->Divide(); return; case '%': Match('%', file); SignedFactor(cpu, file); cpu->PopValue(); cpu->Modulo(); return; default: Expected("Multiplication Operation", file); } }
void Term() { SignedFactor(); while (strchr("*/", Look)) { EmitLn("pushl %eax"); switch(Look) { case '*': Multiply(); break; case '/': Divide(); break; default: Expected("Mulop"); } } }
void FirstTerm() { SignedFactor(); Term1(); }