def p_lookup(p): """lookup : load DOT NAME """ p[0] = Node("Lookup") p[0].var = p[1] p[0].var.ctl = "store" p[0].attr = p[3]
def p_array(p): '''array : unary_expr list %prec LBRACKET | tuple list %prec LBRACKET ''' p[0]= Node('Subscript') p[0].var = p[1] p[0].slice = p[2]
def p_array(p): '''array : unary_expr list %prec LBRACKET | tuple list %prec LBRACKET ''' p[0]= Node('ARRAY') p[0].var = p[1] p[0].elems = p[2].elems
def p_arrayAccess1(p): """arrayAccess : load LBRACKET expr RBRACKET | load LBRACKET range RBRACKET """ p[0] = Node("ArrayAccess") p[0].var = p[1] p[0].var.ctl = "store" p[0].args = p[3]
def p_lookup(p): '''lookup : unary_expr DOT IDENTIFIER %prec DOT | list DOT IDENTIFIER %prec DOT | tuple DOT IDENTIFIER %prec DOT ''' p[0] = Node('LOOKUP') p[0].var = p[1] p[0].attr = p[3]
def p_ptr(p): '''ptr : AMP unary_expr | AMP tuple | AMP list ''' p[0] =Node('PTR') p[0].var = p[2]
def p_vdef1(p): '''vdef : IDENTIFIER unary_expr %prec DEF | ptr unary_expr %prec DEF | fptr unary_expr %prec DEF | tuple unary_expr %prec DEF ''' p[0] = Node('VDEF') t = p[1] p[0].datatype = t p[0].var = p[2]
def p_varDef(p): """varDef : type NAME | type NAME LBRACKET INT RBRACKET """ p[0] = Node("VarDef") p[0].dtype = p[1] p[0].var = p[2] if len(p) > 4: p[0].size = p[4].value else: p[0].size = None
def p_ptr(p): """ptr : AMP NAME""" p[0] = Node("Ptr") p[0].var = p[2]
def p_atPtr(p): """atPtr : AT load""" p[0] = Node("At") p[0].var = p[2]
def p_arrayAccess2(p): """arrayAccess : load LBRACKET RBRACKET""" p[0] = Node("ArrayAccess") p[0].var = p[1] p[0].var.ctl = "store" p[0].args = []
def p_expr3(p): """expr : NOT expr""" p[0] = Node("Not") p[0].var = p[2]