void Expression(){ if (IsAddop(Look[0])) EmitLn("CLR D0"); else Term(); EmitLn("MOVE D0,D1"); while (IsAddop(Look[0])){ switch (Look[0]){ case '+': Add(); break; case '-': Subtract(); break; default: Expected("Addop"); } } }
void Expression() { Term(); while(IsAddop(Look)) { EmitLn("push rax"); switch(Look) { case '+': Add(); break; case '-': Subtract(); break; } } }
void Expression() { FirstTerm(); NewLine(); while(IsAddop(Look)) { Push(); switch(Look) { case '+': Add(); break; case '-': Subtract(); break; } NewLine(); } }
void Expression() { if (IsAddop(Token)) { Clear(); } else { Term(); } while(IsAddop(Token)) { Push(); switch(Token) { case '+': Add(); break; case '-': Subtract(); break; default: break; } } }
/* parse and tranlate an expression * vestigial version */ char Expression() { char type; if (IsAddop(Look)) { type = Unop(); } else { type = Term(); } while(IsAddop(Look)) { Push(type); switch (Look) { case '+': type = Add(type); break; case '-': type = Subtract(type); break; default: break; } } return type; }
void Expression() { FirstTerm(); while(IsAddop(Look)) { EmitLn("pushl %eax"); switch (Look) { case '+': Add(); break; case '-': Subtract(); break; default: Expected("Addop"); } } }
void Factor() { if(Look == '(') { Match('('); Expression(); Match(')'); } else if(IsAddop(Look)) { Match('-'); sprintf(tmp,"movl $%c, %%eax", GetNum()); EmitLn(tmp); EmitLn("negl %eax"); } else { sprintf(tmp,"movl $%c, %%eax", GetNum()); EmitLn(tmp); } }
void Expression() { if(IsAddop(Look)) EmitLn("xor %eax, %eax"); else Term(); while (strchr("+-", Look)) { EmitLn("pushl %eax"); switch(Look) { case '+': Add(); break; case '-': Substract(); break; default: Expected("Addop"); } } }