返回文档首页 位运算符(> & ^ | )(bitwise operator)(一)位运算符位运算符属于二元运算符,有这么 & ^ | 。他们之间的优先级关系为:运算符优先级>高&^|低在redy中每一个位运算符在抽象语法树中,都会用一个结点来表示:结点AstNodeLShift表示运算符结点AstNodeRShift表示运算符>>结点AstNodeBitAnd表示运算符&结点AstNodeBitXor表示运算符^结点AstNodeBitOr表示运算符|这>3|8+2图3(三)执行方法:AstNodeLShift的执行方法为:代码3.1AstNodeLShift.execute()    AstNodeLShift.b_left.execute() /*执行左结点*/    left_value=reg0 /*左结点执行后的结果保存在寄存器reg0中*/    AstNodeLShift.b_right.execute() /*执行右结点*/    right_value=reg0 /*右执点的执行结果同样也保存在寄存器reg0中*/    ret_value=left_value.lshift(right_value) /*调用方法lshift*/    reg0=ret_value /*把执行后的结果保存在寄存器reg0中*/endAstNodeRShift的执行方法为:代码3.2AstNodeRShift.execute()    AstNodeRShift.b_left.execute() /*执行左结点*/    left_value=reg0 /*左结点执行后的结果保存在寄存器reg0中*/    AstNodeRShift.b_right.execute() /*执行右结点*/    right_value=reg0 /*右执点的执行结果同样也保存在寄存器reg0中*/    ret_value=left_value.rshift(right_value) /*调用方法rshift*/    reg0=ret_value /*把执行后的结果保存在寄存器reg0中*/endAstNodeBitAnd的执行方法为:代码3.3AstNodeBitAnd.execute()    AstNodeBitAnd.b_left.execute() /*执行左结点*/    left_value=reg0 /*左结点执行后的结果保存在寄存器reg0中*/    AstNodeBitAnd.b_right.execute() /*执行右结点*/    right_value=reg0 /*右执点的执行结果同样也保存在寄存器reg0中*/    ret_value=left_value.bit_and(right_value) /*调用方法bit_and*/    reg0=ret_value /*把执行后的结果保存在寄存器reg0中*/endAstNodeBitXor的执行方法为:代码3.4AstNodeBitXor.execute()    AstNodeBitXor.b_left.execute() /*执行左结点*/    left_value=reg0 /*左结点执行后的结果保存在寄存器reg0中*/    AstNodeBitXor.b_right.execute() /*执行右结点*/    right_value=reg0 /*右执点的执行结果同样也保存在寄存器reg0中*/    ret_value=left_value.bit_xor(right_value) /*调用方法bit_xor*/    reg0=ret_value /*把执行后的结果保存在寄存器reg0中*/endAstNodeBitOr的执行方法为:代码3.5AstNodeBitOr.execute()    AstNodeBitOr.b_left.execute() /*执行左结点*/    left_value=reg0 /*左结点执行后的结果保存在寄存器reg0中*/    AstNodeBitOr.b_right.execute() /*执行右结点*/    right_value=reg0 /*右执点的执行结果同样也保存在寄存器reg0中*/    ret_value=left_value.bit_or(right_value) /*调用方法bit_or*/    reg0=ret_value /*把执行后的结果保存在寄存器reg0中*/end返回文档首页 附:  代码下载: git clone git://git.code.sf.net/p/redy/code redy-codeAstNodeLShift  AstNodeRShift  AstNodeBitAnd AstNodeBitXor AstNodeBitOr  位于src/syntax/  文件ast_node_binary_expr中
10-07 13:57
查看更多