void BoolXor() { Match('~'); BoolTerm(); EmitLn("xor (%esp), %eax"); EmitLn("addl $4, %esp"); /* recover the stack */ }
void BoolExpression() { BoolTerm(); while(IsOrOp(Look)) { EmitLn("push rax"); switch(Look) { case '|': BoolOr();break; case '~': BoolXor();break; } } }
void BoolExpression(void) { message("BoolExpression"); BoolTerm(); while (IsOrop(Token[0])) { switch (Token[0]) { case '|': BoolOr(); break; case '^': BoolXor(); break; } } }
void BoolExpression() { BoolTerm(); NewLine(); while(IsOrOp(Look)) { Push(); switch(Look) { case '|': BoolOr(); break; case '~': BoolXor(); break; } NewLine(); } }
/* Parse and Translate a Boolean Expression * <bool_expression> ::= <bool_term> ( or_op <bool_term> )* */ void BoolExpression() { BoolTerm(); while(IsOrOp(Token)) { Push(); switch(Look) { case '|': BoolOr(); break; case '~': BoolXor(); break; default: break; } } }
void BoolXor() { Match('~'); BoolTerm(); EmitLn("xor rax, [rsp]"); EmitLn("add rsp, 8"); }
void BoolOr() { Match('|'); BoolTerm(); EmitLn("or rax, [rsp]"); EmitLn("add rsp, 8"); }
void BoolXor(void) { MatchString("^"); BoolTerm(); PopXor(); }
void BoolOr(void) { MatchString("|"); BoolTerm(); PopOr(); }
/* Recognize and Translate a Boolean XOR */ void BoolXor() { Next(); BoolTerm(); PopXor(); }
/* Recognize and Translate a Boolean OR */ void BoolOr() { Next(); BoolTerm(); PopOr(); }
void BoolOr() { Match('|'); BoolTerm(); PopOr(); }
void BoolXor() { Match('~'); BoolTerm(); PopXor(); }