예제 #1
0
def p_complex145(p):
	'''complex145 : empty'''
	p[0] = {}
	p[0]['name_fun'] = sym_tab.get_name()
	
	sym_tab.addID(p[-1], "function")
	displayValue, offset = sym_tab.getAttri(p[-1], 'level'), sym_tab.getAttri(p[-1], 'offset')
	place = sym_tab.new_temp((displayValue, offset), variable=p[-1])
	sym_tab.add_attri(p[-1], sym_tab.getCurrentScope(), place)
	sym_tab.add_attri(p[-1], 'name_fun', p[0]['name_fun'])
	sym_tab.add_Sc(p[0]['name_fun'])
	TAC.code[p[0]['name_fun']] = []
	TAC.quad[p[0]['name_fun']] = 0
	TAC.nq[p[0]['name_fun']] = -1
예제 #2
0
def p_ARRAY_ASGN(p):
    '''ASGN : Identifier EQUALS ARRAY DOT NEW LPAREN NUMBER RPAREN '''
    p[0] = {}
    if sym_tab.exists(p[1]):
        sym_tab.add_attri(p[1], 'type', 'ARRAY')
        if p[1] in sym_tab.scope[len(sym_tab.scope) - 1]:
            place = sym_tab.getAttri(
                p[1], sym_tab.scope[len(sym_tab.scope) - 1]['__scope__'])
        else:
            disp_val = sym_tab.getAttri(p[1], 'level')
            offset = sym_tab.getAttri(p[1], 'offset')
            place = sym_tab.new_temp((disp_val, offset), variable=p[1])
            sym_tab.add_attri(p[1],
                              sym_tab.scope[len(self.scope) - 1]['__scope__'],
                              p[1])
        TAC.emit('=', '[]', place, p[7])
        p[0]['code'] = ['=' + ',' + '[]' + ',' + str(place) + ',' + p[7]]
    else:
        sym_tab.addID(p[1], 'ARRAY')
        # Create a temporary for the current scope
        displayValue, offset = sym_tab.getAttri(
            p[1], 'scopeLevel'), sym_tab.getAttri(p[1], 'offset')
        place = sym_tab.new_temp((displayValue, offset), variable=p[1])
        sym_tab.add_attri(p[1],
                          sym_tab.scope[len(sym_tab.scope) - 1]['__scope__'],
                          p[1])
        TAC.emit('=', '[]', place, p[7])
예제 #3
0
def p_ARG_relational(p) :
  ''' ARG : Identifier EQUALS ARG SemiColon       '''

  p[0] = {}
  
  place = None
  if sym_tab.exists(p[1]):
    
    sym_tab.add_attri(p[1])

    if p[1] in sym_tab.scope[len(sym_tab.scope)-1] :
      place = sym_tab.getAttri(p[1],sym_tab.scope[len(sym_tab.scope)-1]['__scope__'])
    else :
      disp_val = sym_tab.getAttri(p[1],'scopelevel')
      offset = sym_tab.getAttri(p[1],'offset')
      place = sym_tab.new_temp((disp_val, offset), variable=p[1])
      sym_tab.add_attri(p[1],sym_tab.scope[len(self.scope) - 1]['__scope__'],p[1])
      TAC.emit('=',p[1],str(p[3]['place']),'')
      p[0]['code']=p[3]['code']+['='+','+str(p[1])+','+str(p[3]['place']) +','+'' ]
  else :
    sym_tab.addID(p[1], p[3]['type'])
    print p[3], "FOOO"

    # Create a temporary for the current scope
    displayValue, offset = sym_tab.getAttri(p[1], 'scopeLevel'), sym_tab.getAttri(p[1], 'offset')
    place = sym_tab.new_temp((displayValue, offset), variable=p[1])
    sym_tab.add_attri(p[1], sym_tab.scope[len(sym_tab.scope)-1]['__scope__'], p[1])
    TAC.emit('=',p[1],str(p[3]['place']),'')
    p[0]['code']=p[3]['code']+['='+','+str(p[1])+','+str(p[3]['place']) +','+'' ]



  print p[3], "RANDi"
예제 #4
0
def p_ASGN_basic(p):
    '''ASGN : Identifier EQUALS EXPR '''
    p[0] = {}
    place = None
    if sym_tab.exists(p[1]):

        sym_tab.add_attri(p[1], 'type', p[3]['type'])

        if p[1] in sym_tab.scope[len(sym_tab.scope) - 1]:
            place = sym_tab.getAttri(
                p[1], sym_tab.scope[len(sym_tab.scope) - 1]['__scope__'])
        else:
            disp_val = sym_tab.getAttri(p[1], 'level')
            offset = sym_tab.getAttri(p[1], 'offset')
            place = sym_tab.new_temp((disp_val, offset), variable=p[1])
            sym_tab.add_attri(p[1],
                              sym_tab.scope[len(self.scope) - 1]['__scope__'],
                              p[1])
        TAC.emit('=', place, str(p[3]['place']), '')
        # if p[1] == 'a' and p[3]['place'] == '3' :
        #   print "HOLLO"
        #print p[3], "OKY" , p[1]
        p[0]['code'] = p[3]['code'] + [
            '=' + ',' + str(place) + ',' + str(p[3]['place']) + ',' + ''
        ]
    else:
        sym_tab.addID(p[1], p[3]['type'])

        # Create a temporary for the current scope
        displayValue, offset = sym_tab.getAttri(
            p[1], 'scopeLevel'), sym_tab.getAttri(p[1], 'offset')
        place = sym_tab.new_temp((displayValue, offset), variable=p[1])
        sym_tab.add_attri(p[1],
                          sym_tab.scope[len(sym_tab.scope) - 1]['__scope__'],
                          p[1])
        TAC.emit('=', p[1], str(p[3]['place']), '')