code: def p_id_expr(p):
      
      entry = SYMBOL_TABLE.access_id(p[1], p.lineno(1), default_class=CLASS.var)
      if entry is None:
          p[0] = None
          return
  
      entry.accessed = True
      if entry.type_ == TYPE.auto:
          entry.type_ = _TYPE(gl.DEFAULT_TYPE)
          api.errmsg.warning_implicit_type(p.lineno(1), p[1], entry.type_)
  
      p[0] = entry
  
      """
      if entry.class_ == CLASS.var:
          if entry.type_ == TYPE.auto:
              entry.type_ = SYMBOL_TABLE.basic_types[gl.DEFAULT_TYPE]
              #api.errmsg.warning_implicit_type(p.lineno(1), p[1], entry.type_)
      """
      if entry.class_ == CLASS.array:
          if not LET_ASSIGNMENT:
              syntax_error(p.lineno(1), "Variable '%s' is an array and cannot be used in this context" % p[1])
              p[0] = None
      elif entry.kind == KIND.function:  # Function call with 0 args
          p[0] = make_call(p[1], p.lineno(1), make_arg_list(None))
      elif entry.kind == KIND.sub:  # Forbidden for subs
          api.errmsg.syntax_error_is_a_sub_not_a_func(p.lineno(1), p[1])
          p[0] = None
docs: bexpr : ID
               | ARRAY_ID