def p_halfcblock(p): '''halfcblock : Lcurly | halfcblock pvar | halfcblock dot | halfcblock dvar | halfcblock spaces | halfcblock identifier | halfcblock newline | halfcblock cblock | halfcblock pblock | halfcblock colon | halfcblock string | halfcblock num | halfcblock eq | halfcblock lt | halfcblock gt | halfcblock not | halfcblock tab | halfcblock misc | halfcblock comma | halfcblock fcall ''' p[0] = Node('halfc','') if len(p)>2: p[0].args=p[1].args n=p[2] if isinstance(p[2],str): x= p[2] if x=='\n': x='newline' n=Node("token") n.str = x p[0].args.append(n) else: p[0].args= []
def p_fDef(p): """fDef : DEF NAME defTuple ARROW EXCLAMATION NAME block""" p[0] = Node("Fdef") p[0].func = p[2] p[0].args = p[3] p[0].rettype = p[6] p[0].body = p[7]
def p_fcall(p): '''fcall : unary_expr tuple | fcall tuple ''' p[0] = Node('FCALL') p[0].func = p[1] p[0].args = 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_fdef(p): '''fdef : DEF IDENTIFIER tuple block ''' p[0] = Node('FuncDef') p[0].name = p[2].value p[0].args = Node('Arguments') p[0].args.args = p[3].elems p[0].body = p[4].body
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_fCall2(p): """fCall : load LPAREN expr RPAREN """ p[0] = Node("Fcall") p[0].func = p[1] p[0].args = [p[3]]
def p_fCall1(p): """fCall : load LPAREN exprList RPAREN """ p[0] = Node("Fcall") p[0].func = p[1] p[0].args = p[3]
def p_fptr(p): '''fptr : tuple ARROW IDENTIFIER ''' p[0] = Node('FPTR') p[0].args = p[1].elems p[0].func = p[3]